刚开始看到递归函数时,第一反应是,短小精悍,看一遍代码后,感觉题也不难啊。也就直接体现了递归函数的优势,但是,当自己看到题之后,你是否能看出递归的思想呢?
看以下实例:
看以下C语言代码讲解:
#include <stdio.h>
#include <stdlib.h>
int fo(int j,int a,int b);
int fj(int j,int a,int b);
int fj(int j,int a,int b) //当求F(n), n为奇数时
{
if(j==1)
{
return a;
}
else if(j==2)
{
return b;
}
else
{
return fo(j-1,a,b)+fj(j-2,a,b); //注意:这是两个不同的函数求和
}
}
int fo(int j,int a,int b) //当求F(n), n为偶数时
{
if(j==1)
{
return a;
}
else if(j==2)
{
return b;
}
else
{
return fj(j-1,a,b)+fo(j-2,a,b)+fj(j-3,a,b); //注意:用到两个不同函数
}
}
int main()
{
int n,a,b;
int i,cou,s[10];
scanf("%d",&n); //n代表求n次"山寨版"斐波拉契数列的值
for(i=0;i<n;i++)
{
scanf("%d%d%d",&a,&b,&cou); //cou 代表斐波拉契数列第cou个值
if(cou==1){s[i]=a;}
else if(cou==2){s[i]=b;}
else if(cou%2==0)
{
s[i]=fo(cou,a,b);
}
else
{
s[i]=fj(cou,a,b);
}
}
for(i=0;i<n;i++)
{
printf("%d\n",s[i]);
}
return 0;
}
如有发现问题或有不懂的,欢迎在评论区留言。