//翻转字符串
#include<stdio.h>
void fx(char string[],int len)
{
printf("%c",string[len]);
if(len==0)
{
return ;
}
else{
return fx(string,len-1);
}
}
int main()
{
char string[]="I love you";
int len=sizeof(string)/sizeof(string[0]);
printf("I love you");
fx(string,len-1) ;
return 0;
}
//斐波那契数列1.1.2.3.5.8
#include<stdio.h>
int fx(int a)
{
if(a==1||a==2){
return 1;
}
else{
return fx(a-1)+fx(a-2);
}
}
int main()
{
int i;
for(i=1;i<20;i++){
printf("%d\t\n",fx(i));
}
return 0;
}
//阶乘
#include<stdio.h>
int fx(int i){
if(i==0){
return 1;
}
else if(i==1){
return 1;
}
return i*fx(i-1);
}
int main()
{
int i;
scanf("%d",&i);
printf("%d",fx(i));
return 0;
}
//数组求和
#include<stdio.h>
int sum(int brr[],int i)
{
if(i==0){
return brr[i];
}
else{
return brr[i]+sum(brr,i-1);
}
}
int main()
{
int arr[]={1,2,3,4,5,6,100};
int len=sizeof(arr)/sizeof(arr[0]);
printf("%d",sum(arr,len-1));
return 0;
}
//辗转相除 求最大公约
#include<stdio.h>
int fx(int a,int b)
{
if(a%b==0){
return b;
}
return fx(b,a%b);
}
int main()
{
int num1,num2;
scanf("%d%d",&num1,&num2);
printf("%d",fx(num1,num2));
return 0;
}
其中辗转相除求最大公约 例如:8%3==2...2
3%2==1...1
2%1==0...1
那么1就是8和3的最大公约
总结递归三种思维:1,切蛋糕思维
2,找递推公式
3,等价转换