我正在尝试使用Fibonacci系列进行练习。
我必须实现一个递归函数,连续的素数n个斐波那契并打印它们
在同一个功能。问题是我的功能打印也是中间号码。
例如,n = 6
的结果应为:1 1 2 3 5 8
。
任何解决方案?
由于
#include<iostream>
using namespace std;
int rec(int n)
{
int a, b;
if (n == 0 || n == 1)
{
return n;
}
else
{
a = rec(n - 1);
b = rec(n - 2);
cout << a + b << endl;
return a + b;
}
}
int main()
{
int n = 6;
rec(n);
return 0;
}
答案 0 :(得分:2)
我已经接受了static int
的帮助。这就是你想要的方式。
void rec(int n)
{
static int a=0,b=1,sum;
if(n>0)
{
sum = a+b;
a=b;
b= sum;
cout<<sum<<" ";
rec(n-1);
}
}
虽然你必须自己在main()
打印第一个斐波那契数字。
cout<<"0 ";
rec(n);
答案 1 :(得分:1)
您可以使用:
#include<iostream>
using namespace std;
#define MAXN 100
int visited[MAXN];
int rec(int n)
{
if(visited[n])
{
return visited[n];
}
int a, b;
if (n == 0|| n==1)
{
return n;
}
else
{
a = rec(n - 1);
b = rec(n - 2);
cout << " " <<a + b;
return visited[n] = a + b;
}
}
int main()
{
int n = 6;
cout<< "1";
rec(n);
cout<<endl;
return 0;
}
此实现使用动态编程。所以它减少了计算时间:))
答案 2 :(得分:0)
因为您在rec
打印,因为递归而多次打印。无需在递归函数中打印。而是将结果打印在主
#include<iostream>
using namespace std;
int rec(int n)
{
int a, b;
if (n == 0 || n == 1)
{
return n;
}
else
{
a = rec(n - 1);
b = rec(n - 2);
//cout << a + b << endl;
return a + b;
}
}
int main()
{
int n = 6;
for (int i = 1; i <= n; i++)
{
cout << rec(i) << endl;
}
system("pause");
return 0;
}
答案 3 :(得分:0)
我很确定你已经有了解决方案,但我的方法略有不同,不需要你使用数据结构:
/ *作者:Eric Gitangu 日期:2015年7月29日 该程序为32位数字范围吐出fibionacci序列 假设:所有值均为+ ve;因此unsigned int在这里工作 * /
#include <iostream>
#include <math.h>
#define N pow(2.0,31.0)
using namespace std;
void fibionacci(unsigned int &fib, unsigned int &prevfib){
unsigned int temp = prevfib;
prevfib = fib;
fib += temp;
}
void main(){
int count = 0;
unsigned int fib = 0u, prev = 1u;
while(fib < N){
if( fib ==0 ){
fib = 0;
cout<<" "<< fib++ <<" \n ";
continue;
}
if( fib == 1 && count++ < 2 ){
fib = 1;
cout<< fib <<" \n ";
continue;
}
fibionacci(fib, prev);
cout<< fib <<" \n ";
}
}
答案 4 :(得分:0)
试试这个递归函数。
int fib(int n)
return n<=2 ? n : fib(n-1) + fib(n-2);
这是我所知道的最优雅的解决方案。