码迷,mamicode.com
首页 > 其他好文 > 详细

17. 计算斐波那契数(非递归方法)

时间:2020-02-18 20:14:31      阅读:55      评论:0      收藏:0      [点我收藏+]

标签:方便   利用   应该   方法   span   思路   stream   int   long   

题目:

编写非递归函数计算斐波那契数 Fn 。对于每一个斐波那契数,你的代码应该只计算一次。测试你的代码。

思路:

非递归算法,要从正向进行迭代计算。我们统一一下定义:数列从 1 开始,即F(1) = 1, F(2) = 1。

利用三个变量:fib_front,fib_behind, fib。顾名思义,fib_front代表靠前的一个数,fib_behind代表靠后的一个数, fib代表当前的数。每次循环,将靠后的数值给靠前的那个,再将当前数的值给靠后的那个,这样就完成了一次迭代。

代码:

 1 #include <iostream>
 2 using namespace std;
 3 
 4 long long fib_recursion (int n) {
 5     if (1 == n || 2 == n) {
 6         return 1;
 7     } else {
 8         return fib_recursion( n - 1 ) + fib_recursion( n - 2 );
 9     }
10 }
11 
12 long long fib_non_recursion(int n) {
13     long long fib_front = 1, fib_behind = 1;
14     long long fib = 0;
15     if (1 == n || 2 == n) {
16         return 1;
17     }
18 
19     for (int i = 3; i <= n; ++i) {
20         fib = fib_front + fib_behind;
21         fib_front = fib_behind;
22         fib_behind = fib;
23     }
24 
25     return fib;
26 }
27 
28 int main() {
29     cout << "Enter n : ";
30     int n;
31     cin >> n;
32     long long result = fib_recursion(n);
33     cout << "result(recursion) : " << result << endl;
34 
35     result = fib_non_recursion(n);
36     cout << "result(non-recursion) : " << result << endl;
37 
38     return 0;
39 }

代码中有几处需要说明:

第一,上面是递归算法,下面是非递归算法,放在一起方便对比。

第二,关于斐波那契数列,我们采用从 1 开始的定义方法。

17. 计算斐波那契数(非递归方法)

标签:方便   利用   应该   方法   span   思路   stream   int   long   

原文地址:https://www.cnblogs.com/Hello-Nolan/p/12327535.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!