递归函数的练习
#include <stdio.h>
#include<string.h>
/*
int digui(a)
{
if(a==1)
{
return 1;
}
else
{
return n+digui(a-1);
}
}
*/
//递归求鸭子上架
int yazi(int n,int sum)
{
int num=0;
if(n==1)
{
return 1;
}
else
{
sum=(sum+1)*2;
num+=sum;
printf("%d\n",num);
yazi(n-1,sum);
}
}
//递归求字数的和
int zishu(int b)
{
if(b==0)
{
return 0;
}
else
{
return b%10+zishu(b/10);
}
}
//递归进制转换
int jinzhi(int n)
{
if(n==1||n==0)
{
printf("%d",n);
}
else
{
jinzhi(n/2);
printf("%d",n%2);
}
}
//递归实现整数逆转
void nizhuan(int n)
{
if(n<10)
{
printf("%d",n);
}
else
{
printf("%d",n%10);
nizhuan(n/10);
}
}
//递归实现字符串逆转
int zifu(char arr[],int line)
{
if(line==0)
{
printf("%c",arr[0]);
return 0;
}
else
printf("%c",arr[line]);
zifu(arr,line-1);
}
//递归实现阶乘
int jiecheng(int n)
{
if(n==1)
{
return 1;
}
else
{
return n*jiecheng(n-1);
}
}
//递归实现肥波纳妾
int feibo(int crr[5],int n,int k)
{
if(k==n)
{
return 0;
}
if(k==0||k==1)
{
crr[k]=1;
printf("%d\t",crr[k]);
}
if(k>1)
{
crr[k]=crr[k-1]+crr[k-2];
printf("%d\t",crr[k]);
}
feibo(crr,n,k+1);
}
int main(int argc, const char *argv[])
{
// int a=0;
// scanf("%d",&a)
// digui(a);
int n=7;
int sum=2;
int c=yazi(n,sum);
int b=12345;
int d=zishu(b);
printf("%d\n",d);
int e=0;
scanf("%d",&e);
jinzhi(e);
printf("\n");
int f=123;
nizhuan(f);
printf("\n");
char arr[]="adsada";
zifu(arr,strlen(arr)-1);
printf("\n");
int h=4;
int i=jiecheng(h);
printf("%d\n",i);
int j=5;int crr[5];
feibo(crr,j,0);
return 0;
}