递归参考文章:https://www.cnblogs.com/kubidemanong/p/10538799.html
//递归:二分查找
int BinaryFind(int* arr, int left, int right, int value)
{
int pos = -1;
if(arr == NULL || left < 0 || right < left )
{
return pos;
}
else
{
int mid = (left + right) / 2;
if(arr[mid] > value)
{
return BinaryFind(arr, left, mid - 1, value);
}
else if(arr[mid] < value)
{
return BinaryFind(arr, mid + 1, right, value);
}
else
{
pos = mid;
}
return pos;
}
}
//二分查找(非递归)
int BinaryFind(int* arr, int len, int value)
{
int pos = -1;
if(arr == NULL || len <= 0)
{
return pos;
}
int left = 0;
int right = len - 1;
while(left <= right)
{
int mid = (left + right) / 2;
if(arr[mid] > value)
{
right = mid - 1;
}
else if(arr[mid] < value)
{
left = mid + 1;
}
else
{
pos = mid;
break;
}
}
return pos;
}
//n的阶乘
int Mul_N(int n)
{
if(n == 1 || n == 2)
{
return n;
}
//关系式
return n * Mul_N(n - 1);
}
//普通查找一个值
int FindValue(int* arr, int len, int value)
{
int pos = -1;
if(arr == NULL || len < 1)
return pos;
else if(arr[len - 1] == value)
{
pos = len - 1;
}
else
{
return FindValue(arr, len - 1, value);
}
}
//递归输出数组元素
void Show(int* arr, int len)
{
if(arr == NULL || len < 1)
return;
printf("%d ", arr[len - 1]);
Show(arr, len - 1);
}
//非递归:斐波那契数列求第n项
int FiBo(int n)
{
if(n < 1)
return -1;
if(n < 3)
{
return 1;
}
int a = 1;
int b = 1;
int c = 1;
for(int i = 3; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}
//递归:计算斐波那契数列第n项
int FiBo(int n)
{
if(n < 1)
{
return -1;
}
if(n < 3)
{
return 1;
}
else
{
return FiBo(n - 1) + FiBo(n - 2);
}
}
//汉诺塔
void Move(char src, char des)
{
printf("%c --> %c\n", src, des);
}
void HanNuo(char src, char mid, char des, int count)
{
if(count == 1)
{
Move(src, des);
return;
}
else
{
HanNuo(src, des, mid, count - 1);
Move(src, des);
HanNuo(mid, src, des, count - 1);
}
}