在c ++中使用递归打印fibonacci系列

时间:2014-02-14 13:53:49

标签: c++ recursion fibonacci

我刚开始自学c ++。我现在正在努力练习。我想使用递归打印所有n(用户输入)斐波那契数字,但它不起作用。你可以帮帮我吗?谢谢!!

#include <iostream>
using namespace std;
int fibonacci(int n)
{   
    if (n==1)
    {
        return 1;
        cout<<1<<" ";
    }   
    else if (n==2)
    {
        return 1;
        cout<<1<<" ";
    }
    else
    {
        return (fibonacci(n-1)+fibonacci(n-2));
        cout<<fibonacci(n-1)+fibonacci(n-2)<<" ";
    }
}
int main()
{
    int n;
    cin>>n;
    fibonacci(n);
    return 0;
}

3 个答案:

答案 0 :(得分:4)

如果您查看Rosetta Code page for Fibonacci,就会看到F(0) == 0F(1) == 1

int fibonacci(int n)
{   

    if (n == 0)
    {
        return 0;
    }   
    else if (n == 1)
    {
        return 1;
    }
    else
    {
        return fibonacci(n-1) + fibonacci(n-2);
    }

    return fib;
}

在这种情况下,你有一个函数来计算特定位置的斐波纳契数,对吗?

所以现在你需要计算它们然后打印出来:

int main()
{
    int n;
    cin >> n;

    if (n < 0)
    {
        return -1; // This means there was an error
    }

    for (int i = 1; i < n; ++i)
    {
        cout << fibonacci(i) << " ";
    }

    return 0;
}

请注意,这并非最有效的方法,但它有助于您了解递归的工作原理。

答案 1 :(得分:3)

在Fibonacci函数中不需要cout,只需在int main()中循环cout ...也改变IF Fibonacci函数的条件为&lt; = 0否则会给你一个分段错误(错误)

#include <iostream>
using namespace std;
int fibonacci(int n)
{   
    if (n<=0)
    {
        return 0;
    //    cout<<1<<" ";
    }   
    else if (n==1)
    {
        return 1;
    //    cout<<1<<" ";
    }
    else
    {
        return (fibonacci(n-1)+fibonacci(n-2));
    //   cout<<fibonacci(n-1)+fibonacci(n-2)<<" ";
    }
}
int main()
{
    int n;
    cin>>n;
    for (int x = 0; x < n; x++)
    cout << fibonacci(x) << " ";
    cout << endl;

  return 0;
}

答案 2 :(得分:2)

即使您在return语句之前放置cout,您的代码也不会以正确的顺序为您提供斐波纳契系列。假设您要求fibonacci(7)。它将打印fibonacci(6)的所有中间计算,然后它将打印fibonacci(5)的所有1。