zoukankan      html  css  js  c++  java
  • 17. 计算斐波那契数(非递归方法)

    题目:

    编写非递归函数计算斐波那契数 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 开始的定义方法。

  • 相关阅读:
    PHP生成二维码并上传到七牛云
    算法入门---选择排序
    算法入门
    react入门-refs
    react入门-props.children
    react入门-组件方法、数据和生命周期
    react入门-jsx
    递归
    node的path.join 和 path.resolve的区别
    vuex的使用
  • 原文地址:https://www.cnblogs.com/Hello-Nolan/p/12327535.html
Copyright © 2011-2022 走看看