阶乘 代码实现如下:
int getfact(int n)
{
if (n == 1) {
return 1;
}
return getfact(n - 1) * n;
}
int main()
{
int n = getfact(5);
printf("%d ", n);
return 0;
}
斐波那契数列(递归法)
int getfabo(int n) //1 1 2 3 5 8 .......
{
if (n == 1 || n == 2) {
return 1;
}
return getfabo(n - 2)+ getfabo(n - 1);
}
int main()
{
lint n = getfabo(5);
printf("%d ", n);
}
n的累加项(1+2+.....+n)
代码实现如下:
int sum(int n)
{
if (n == 1) return 1;
else
return sum(n - 1) + n;
}
int main()
{
int n = 10;
printf("%d", sum(5));
}
字符串数组输出(递归法)
void show(char* a)
{
printf("%c", *a);
if (*a != '\0') {
a++;
show(a);}
}
int main()
{
char c[6] = "asdfg";
show(c);
return 0;
}
字符串数组反向输出(不改变原顺序存储)(递归法)
void invershow(char* a)
{
if (*a != '\0')
{
invershow(a+1);
}
printf("%c", *a);
}
int main()
{
char c[6] = "asdfg";
invershow(c);
return 0;
}
二分折半查找(递归法)
代码实现如下:
int binarysearch(int* arr, int len, int value)
{
if (value< *arr || value>*(arr + len - 1)) exit(-2); //判断值是否在数组区间内
else if (*arr == value) return 0;
else if (*(arr + len - 1) == value) return len - 1;
int* l = arr;
int* r = arr + len - 1;
int mid = (r-l) >> 1;
if (mid <= 0) exit(-1); //无此数据时退出条件
else if (*(arr+mid) == value) return mid;
else if (*(arr + mid) < value) return binarysearch(arr+mid, len-mid, value)+mid;
else if (*(arr + mid) > value) return binarysearch(arr , mid+1, value);
}
int main()
{
int a[10] = { 1,2,3,4,5,6,7,8,9,10 };
printf("%d", binarysearch(a, sizeof(a) / sizeof(a[0]), 5));
}