竹_

折半查找、欧几里得算法、幂运算和斐波那契数列

1.折半查找

template<typename Comparable>
int binarySearch(const vector<Comparable>& a, const Comparable& x)
{
int left = 0, right = a.size() - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] > x) {
right = mid - 1;
}
else if (a[mid] < x) {
left = mid + 1;
}
else return mid;
}
return -1;
}

2. 欧几里得算法,计算两个整数最大公因数

long long gcd(long long a, long long b)
{
while (b != 0) {
long long tmp = a % b;
a = b;
b = tmp;
}
return a;
}
//递归版
long long gcd2(long long a, long long b) {
return b == 0 ? a : gcd(b, a % b);
}

3.幂运算

计算XN的明显的算法是使用N-1次乘法自乘。N≤1是递归的基准情形。否则,若N是偶数,则有XN=XN/2 · XN/2;如果N是奇数,则XN =X(N-1)/2 · X(N-1)/2 · X。

long long pow(long long x, int n) {
if (n == 0)return 1; //基准情形
if (n == 1)return x; //基准情形
if (n % 2)
return pow(x * x, n / 2) * x;
else
return pow(x * x, n / 2);
}

4.斐波那契数列

斐波那契数列的定义时 a0=0, a1=1 以及 an=an-1 + an-2 (n>1)。

//递归
int fib(int n){
if(n<=1) return n;
return fib(n-1)+fib(n-2);
}
//通过记忆化搜索优化后的函数
int memo[MAX_N+1];
int fib(int n){
if(n<=1) return n;
if(memo[n]!=0) return memo[n];
return memo[n]=fib(n-1)+fib(n-2);
}
posted @   aw11  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示