1.递归实现斐波那契数列
int Fibonacci(int n)
{
if (n == 1 || n == 2)
{
return 1;//斐波那契数列的前两位是1
}
else
{
return Fibonacci(n - 1) + Fibonacci(n - 2);//从第三位开始,该位的值为该位的前两位之和
}
}
2.递归实现二分查找
int Binary_Search(const int* ar,int left, int right, int val)
{
assert(ar != nullptr);//如果为空指针就退出
if (right < left)
{
return -1;//没找到就返回-1
}
int mid = (left + right) / 2;//折半
if (ar[mid] == val)
{
return mid;//找到就返回下标
}
else if (ar[mid] < val)
{
return Binary_Search(ar, mid + 1, right, val);//mid存储的值小于val,在后半部分查找
}
else
{
return Binary_Search(ar, left, mid - 1, val);//mid存储的值大于val,在前半部分查找
}
}
还有一种将时间复杂度降下来的方法:
int fac(int n)
{
int a = 1;
int b = 1;
return facc(n,a,b);
}
int facc(int n, int a, int b)
{
if(n <= 2)
{
return a;//
}
else
{
return facc(n - 1,a + b, a);
}
}
3.递归实现欧几里得算法求最大公约数
unsigned int gcd(unsigned int a, unsigned int b)
{
if (b == 0)
{
return a;//b = 0,a就是最大公约数
}
else
{
return gcd(b, a % b);
}
}
4.递归打印数组
1. 正向打印
void Recursion_Print(int* ar, int n)
{
if (n > 0)
{
Recursion_Print(ar, n - 1);
printf("%3d", ar[n - 1]);
}
}
2. 反向打印
void Recursion_Print(int* ar, int n)
{
if (n > 0)
{
printf("%3d", ar[n - 1]);
Recursion_Print(ar, n - 1);
}
}
5.查找数组中的值
int FindValue(int* br, int n, int val)
{
assert(br != nullptr);
int pos = n - 1;
if (br[pos] == val || pos < 0)
{
return pos;//找到就返回下标,找不到就返回-1
}
else
{
return FindValue(br, n - 1, val);
}
}