【问题标题】:printing fibonacci series using recursion in c++ [closed]在 C++ 中使用递归打印斐波那契数列 [关闭]
【发布时间】:2014-03-13 22:12:48
【问题描述】:

我刚开始自学 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;
}

【问题讨论】:

  • 你希望return之后的代码做什么?
  • 代码之后返回不会执行。毕竟,您返回调用函数。
  • 你想要结果,所以:cout &lt;&lt; fibonacci(n);
  • 这一切都是你自己写的吗?如果是的话,通过买一本书或其他东西来加强你的基础知识。否则,你自己写吧。
  • @marcin_j 我试过了,它不起作用...

标签: c++ recursion fibonacci


【解决方案1】:

如果您查看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;
}

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

【讨论】:

  • 然后,你可以搜索memoization是什么意思。
  • 嗯,memoization 真的只是说“不要重复计算同一件事”的一种奇特方式。
【解决方案2】:

Fibonacci 函数中不需要 cout,只需要在 int main() 中逐个循环 cout... 也改变 IF 斐波那契函数中的条件为

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

【讨论】:

  • n
  • 你在返回后也调用 cout...所以它不会被执行
【解决方案3】:

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

【讨论】:

  • 更复杂,因为“cout”行也会触发递归。
猜你喜欢
  • 2013-04-11
  • 2023-01-18
  • 2012-02-15
  • 2023-03-19
  • 2022-11-28
  • 1970-01-01
  • 2012-04-07
  • 2011-07-27
  • 1970-01-01
相关资源
最近更新 更多