我刚开始自学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;
}
答案 0 :(得分:4)
如果您查看Rosetta Code page for Fibonacci,就会看到F(0) == 0
和F(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。