好菜的大学生 2020-03-09 22:10 采纳率: 25%
浏览 5012
已采纳

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;
}

  • 写回答

2条回答 默认 最新

  • threenewbee 2020-03-10 20:30
    关注

    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;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮