赞
踩
// 【递归】Fibonacci数列(斐波那契数列) #include<iostream> using namespace std; int fibonacci(int num); int main() { int num = 0; // 项数 cout << "Fibonacci数列,请输入项数(正整数):"; cin >> num; cout << "此项为:" << fibonacci(num) << endl; //输出结果 return 0; } int fibonacci(int num) { if (num <= 2) return 1; // F(1)=1,F(2)=1 else return fibonacci(num - 1) + fibonacci(num - 2); // F(n)=F(n-1)+F(n-2) }
F(5) = F(4) + F(3);
-> F(4) = F(3) + F(2);
-> F(3) = F(2) + F(1);
-> F(2) = 1;
-> F(1) = 1;
-> F(3) = F(2) + F(1); // 重复计算了 F(3)
-> F(2) = 1;
-> F(1) = 1;
// 【动态规划】Fibonacci数列(斐波那契数列) #include<iostream> using namespace std; int main() { // 项数 int n; cout << "Fibonacci数列,请输入项数:"; cin >> n; // 保存计算过的值 int* F = new int[n]; F[1] = 1; // F(1)=1 F[2] = 1; // F(2)=1 // 自底向上计算 for (int i = 3;i < n;i++) F[i] = F[i - 1] + F[i - 2]; // 输出结果 cout << F[n] << endl; delete[] F; return 0; }
// 【备忘录法】Fibonacci数列(斐波那契数列) #include<iostream> using namespace std; int F[256] = { 0 }; // 保存子问题解的表 int fibonacci(int n); int main() { // 项数 int n; cout << "Fibonacci数列,请输入项数(正整数):"; cin >> n; // 保存子问题解的表,前两个数为 1 F[1] = 1; F[2] = 1; // 自顶向下计算,并保存子问题的解;输出结果 cout << fibonacci(n) << endl; return 0; } int fibonacci(int n) { if (F[n] > 0) return F[n]; else return (F[n] = fibonacci(n - 1) + fibonacci(n - 2)); }
最后,非常欢迎大家来讨论指正哦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。