1.//递归和非递归分别实现求第n个斐波那契数
//递归的方法
int Fib(int n)
{
if(n<=2)
{
return 1;
}
else
{
return Fib(n-1)+Fib(n-2);
}
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = Fib(n);
printf("ret = %d\n",ret);
return 0;
}
// 循环的方法
int Fib(int n)
{
int a = 1;
int b = 1;
int c = 1;
while(n>2)
{
c = a+b;
a = b;
b = c;
n--;
}
return c;
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = Fib(n);
printf("ret = %d\n",ret);
return 0;
}
2.//编写一个函数实现n^k,使用递归实现
////n^k = n*n^k-1
int second_party(int n ,int k)
{
if(k>0)
{
return second_party(n,k-1)*n;
}
else
{
return 1;
}
}
int main()
{
int n = 0;
int k = 0;
int ret = 0;
scanf("%d %d",&n,&k);
ret = second_party(n,k);
printf("n的k次方是:%d\n",ret);
return 0;
}
3.//写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
//例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
int dig_itsum(int n)
{
if((n/10)>0)
{
return n%10 + dig_itsum(n/10);
}
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = dig_itsum(n);
printf("ret = %d\n",ret);
return 0;
}
4.//递归和非递归分别实现strlen
//非递归
#include<assert.h>
int my_strlen(char *p)
{
int count = 0;
assert(p != NULL);
while(*p != '\0')
{
count++;
*p++;
}
return count;
}
int main()
{
char *ch = "abcdefg"; // 错误的写法char = "abcdef";
int i = 0;
i = my_strlen(ch);
printf("%d\n",i);
return 0;
}
//递归
#include<assert.h>
int my_strlen(char *p)
{
assert(p != NULL);
if(*p != '\0')
{
return 1 + my_strlen(p+1);//错误的写法(*p+1)
}
else
{
return 0;
}
}
int main()
{
char *ch = "abcdefgh";
int i = 0;
i = my_strlen(ch);
printf("%d\n",i);
}
5.//递归和非递归分别实现求n的阶乘
//非递归
int Fun(int n)
{
int i = 0;
int ret = 1;
for(i = 1;i<=n;i++)
{
ret = ret * i;
}
return ret;
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = Fun(n);
printf("%d\n",ret);
return 0;
}
//递归
int Fun(int n)
{
if(n<2)
{
return 1;
}
else
{
return n * Fun(n-1);
}
}
int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = Fun(n);
printf("%d\n",ret);
return 0;
}
6.//递归方式实现打印一个整数的每一位
void Fun(int num)
{
if(num >9)
{
Fun(num/10); // printf()不能写到 if语句的里面
}
printf("%d ",num%10);
}
int main()
{
int num = 0;
scanf("%d",&num);
Fun(num);
return 0;
}
7.//编写一个函数reverse_string(char * string)(递归实现)
//实现:将参数字符串中的字符反向排列。
//要求:不能使用C函数库中的字符串操作函数。
#include<assert.h>
void reverse_string(const char *p)
{
assert(p != NULL);
if(*p != '\0')
{
reverse_string(p+1);
}
printf("%c ",*p);
}
int main()
{
char *ch = "abcdef";
reverse_string(ch);
return 0;
}