Fibonacci series
我正在尝试用斐波那契数列进行练习。
我必须使用递归函数来实现,即斐波那契素数的素数n的继承,并将其打印出来
在相同的功能。问题是我的函数也打印中间号。
例如,
有解决方案吗?
谢谢
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #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; } |
我接受了
1 2 3 4 5 6 7 8 9 10 11 12 | 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); } } |
尽管您必须自己在
1 2 | cout<<"0"; rec(n); |
您可以使用此:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | #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; } |
此实现使用动态编程。因此,它减少了计算时间:)
尝试使用此递归函数。
1 2 | int fib(int n) return n<=2 ? n : fib(n-1) + fib(n-2); |
这是我所知道的最优雅的解决方案。
我很确定您已经找到了可行的解决方案,但是我有一个略有不同的方法,该方法不需要您使用数据结构:
/ *作者:埃里克·吉坦古(Eric Gitangu)
日期:2015年7月29日
该程序将fibion??acci序列显示为32位数字的范围
假设:所有值均为ve;因此unsigned int在这里工作
* /
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #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++ <<" \ "; continue; } if( fib == 1 && count++ < 2 ){ fib = 1; cout<< fib <<" \ "; continue; } fibionacci(fib, prev); cout<< fib <<" \ "; } } |
因为要在
中打印结果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #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; } |