求解答!C语言-斐波那契数列前n项和问题

斐波那契数列前n项和问题

如果数列的前前两项不为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;
}