题目
写一个函数,输入 n,求斐波那契数列的第 n 项。斐波那契数列的定义如下:
分析
由数列公式可知用递归法是很容易进行求解的,但递归求解的效率会很低,因此需要考虑使用循环求解。
一般来说,能够用递归实现的程序也可以用循环实现,但较之循环法,递归程序虽然设计上更容易,但效率却受到很大影响。
代码实现一:递归法
1 #include <iostream> 2 3 using namespace std; 4 5 int fb(int n) { 6 if (n <= 0) { 7 return 0; 8 } 9 else if (n == 1) { 10 return 1; 11 } 12 else 13 return fb(n-1)+fb(n-2); 14 } 15 16 int main() 17 { 18 int n; 19 cout << "请输入要求解的项 n :" << endl; 20 cin >> n; 21 22 int result = fb(n); 23 24 cout << "第 " << n << " 项为: " << result << endl; 25 26 return 0; 27 }
代码实现二:循环法
1 #include <iostream> 2 3 using namespace std; 4 5 int fb(int n) { 6 int f0 = 0; 7 int f1 = 1; 8 9 int f; 10 for (int i=2; i<=n; i++) { 11 f = f0+f1; 12 f0 = f1; 13 f1 = f; 14 } 15 16 return f; 17 } 18 19 int main() 20 { 21 int n; 22 cout << "请输入要求解的项 n :" << endl; 23 cin >> n; 24 25 int result = fb(n); 26 27 cout << "第 " << n << " 项为: " << result << endl; 28 29 return 0; 30 }
运行测试
小结
尽管递归的效率不高,但面试时,若没有特别说明,递归仍应该作为首选。