1.递归和非递归分别实现求第n个斐波那契数。
2.编写一个函数实现n^k,使用递归实现
-
写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,例如,调用DigitSum(1729),则应该返回1+7+2+9,它的和是19
-
编写一个函数reverse_string(char * string)(递归实现)
实现:将参数字符串中的字符反向排列。
要求:不能使用C函数库中
的字符串操作函数。
5.递归和非递归分别实现strlen
6.递归和非递归分别实现求n的阶乘
7.递归方式实现打印一个整数的每一位
1.
#include<stdio.h>//**斐波那契数列为1 1 2 3 5 8....... 前两个数的和等于第三个数**
int fib(int n)
{
if(n<=2)
{
return 1;
}
if(n>2)
return fib(n-1)+fib(n-2);
}
int main()
{
int n = 0;
scanf("%d",&n);
fib(n);
printf("%d\n",fib(n));
return 0;
}
方法2
#include<stdio.h>
int main()
{
int a = 1;
int b = 1;
int c = 0;
int n = 0;
scanf("%d",&n);
if(n<=2)
{
printf("这个数为%d",a);
}
while(n>2)
{
c = a+b;
a = b;
b = c;
n--;
}
printf("%d",c);
return 0;
}
#include<stdio.h>
int fib(int n)
{
if(n<=2)
{
return 1;
}
if(n>2)
return fib(n-1)+fib(n-2);
}
int main()
{
int n = 0;
scanf("%d",&n);
fib(n);
printf("%d\n",fib(n));
return 0;
}
#include<stdio.h>
int print(int n)
{
int m=0;
int sum=0;
if(n!=0)
{
m=n%10;
sum=m+print(n/10);
}
return sum;
}
int main()
{
int n=1234;
print(n);
printf("%d",print(n));
return 0;
}
#include<stdio.h>
int my_strlen(char *string)
{
int count=0;
while(*string)
{
count++;
string++;
}
return count;
}
void reverse_string(char * string)
{
if(*string)
{
int len=my_strlen(string);
char temp=string[0];
string[0]=string[len-1];
string[len-1]='\0';
reverse_string(string+1);
string[len-1]=temp;
}
}
int main()
{
char str[]="abcsef";
reverse_string(str);
printf("%s",str);
return 0;
}
#include<stdio.h>
#include<assert.h>
int print(char *str)//**非递归写法**
{
int count=0;
while(*str++)
{
count++;
}
return count;
}
int print(const char* str)/**/递归写法**
{
int count=0;
assert(str!=NULL);
if(*str=='\0')
{
return 0;
}
return 1+print(str+1);
}
int main()
{
char *str="abcdef";
print(str);
printf("%d\n",print(str));
return 0;
}
int my_print(int n,int k)**//非递归求阶乘**
{
int sum=1;
int p=n;
int q=k-1;
int i=0;
if(k<1)
{
return 1;
}
if(k>=1)
{
for(i=0; i<=q; i++)
sum=sum*p;
}
return sum;
}
int my_print(int n,int k)**//递归求阶乘**
{
if(k<1)
{
return 1;
}
if(k>=1)
return n*my_print(n,k-1);
}
int main()
{
int m=0;
int n=0;
printf("请输入n,k\n");
scanf("%d%d",&m,&n);
my_print(m,n);
printf("%d\n",my_print(m,n));
return 0;
}
void my_print(int m)**//用递归打印每个数的每一位**
{
if(m>9)
{
my_print(m/10);
}
printf("%d ",m%10);
}
int main()
{
int m=0;
printf("请输入一个数字\n");
scanf("%d",&m);
my_print(m);
return 0;
}