6-5 输出Fibonacci数列的前n项 (15分)

已知Fibonacci数列的规律是1,1,2,3,5,8,…,即数列的前两项是1,其后的每一项都是其前两项的和。输出Fibonacci数列的前n(1<=n<=40)项。要求定义并调用含静态变量的函数Fibonacci(n)计算Fibonacci数列的第n项。
输入格式:
输入n值
输出格式:
以每行4个的格式输出Fibonacci数列的前n项。每项占10位列宽并左对齐。
我看不出来我的问题,还请哥哥们指教:
#include
#include
using namespace std;
int f(int n)
{
static int y;
if(n==1)
y=1;
if(n==2)
y=1;
else
y=y+f(n-2);
return y;

}
int main()
{
int n,j=1;
cin>>n;
for(int i=1;i<=n;i++){
cout<<setw(10)<<setiosflags(ios::left)<<f(n);
j++;
while (j%4==0) cout<<endl;
}
return 0;
}

c++

2个回答

static变量和递归两者不要同时用

用static的写法

#include <iostream>
#include <iomanip>
using namespace std;
int Fibonacci(int n)
{
    static int a = 1;
    static int b = 1;
    if (n == 1 || n == 2) return 1;
    int c = a + b;
    a = b;
    b = c;
    return c;
}
int main () {
    int n;
    cin>>n; 
    for(int i=1;i<=n;i++){
    cout<<setw(10)<<setiosflags(ios::left)<<Fibonacci(i);
    if (i%4==0) cout<<endl;
    }
    return 0;
}

用递归的写法

#include <iostream>
#include <iomanip>
using namespace std;
int Fibonacci(int n)
{
    if (n == 1 || n == 2) return 1;
    return Fibonacci(n - 2) + Fibonacci(n - 1);
}
int main () {
    int n;
    cin>>n; 
    for(int i=1;i<=n;i++){
    cout<<setw(10)<<setiosflags(ios::left)<<Fibonacci(i);
    if (i%4==0) cout<<endl;
    }
    return 0;
}

zjp1310343359
好菜的大学生 好的好的谢谢你
4 个月之前 回复

在递归减 2
这样就不是一层一层是两层两层的
还有我是你弟弟。
请采纳
我上小学六年级

zjp1310343359
好菜的大学生 哈哈哈,达者为先,比我学得好的都是我的前辈
4 个月之前 回复
zjp1310343359
好菜的大学生 ??你是我弟弟
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问