如果数列的前前两项不为1,而是a1和a2,那应该怎么设计这个函数呢?
#include"stdio.h"
int fb(int a1,int a2,int n);
int main()
{
int a,b,n,s;
scanf("%d%d%d",&a,&b,&n);
s=fb(a,b,n);
printf("%d\n",s);
}
int fb(int a1,int a2,int n);
{
}
非递归实现:
int fb(int a1,int a2,int n);
{
int a[10000],s,i;
a[0]=a1;
a[1]=a2;
s=a[0]+a[1];
for(i=2;i<n;i++){
a[i]=a[i-1]+a[i-2];
s+=a[i];
}
return s;
}
递归实现:
#include"stdio.h"
int fb(int a1,int a2,int s,int n);
int main()
{
int a,b,n,s;
scanf("%d%d%d",&a,&b,&n);
s=fb(a,b,a+b,n);
printf("%d\n",s);
}
int fb(int a1,int a2,int s,int n){
int t=a1+a2;
if(n==2) return s;
s=t+fb(a2,t,s,n-1);
return s;
}
#include<stdio.h>
int fb(int a1, int a2, int n)
{
//常规方法
int num = 0;
if (n > 2)
{
int i = 0;
for (i = 0; i < n - 2; i++)
{
num = a1 + a2;
a1 = a2;
a2 = num;
}
return num;
}
else if (n == 1)
return a1;
else if (n == 2) return a2;
else
return 0;
////递归方法(不建议使用)
//if (n > 2)
//{
// return fb(a1, a2, n - 1)+fb(a1,a2,n-2);
//}
//else if (n == 1)
// return a1;
//else if (n == 2) return a2;
//else
// return 0;
}
int main()
{
int ret = 0;
do
{
int a1 = 0; int a2 = 0; int n = 0;
printf("请输入前两位与n的值:");
scanf("%d%d%d", &a1, &a2, &n);
ret = fb(a1, a2, n);
} while (!ret);
printf("第n项为:%d\n", ret);
return 0;
}