zoukankan      html  css  js  c++  java
  • 斐波纳契数列递归和非递归算法

    递归的方法定义:  F0=0,

                              F1=1,

                              Fn=F(n-1)+F(n-2)(n>=2,n∈N*)

    1、1、2、3、5、8、13、21、……

    所谓Fibonacci数列是指这样一种数列,它的前两项均为1,从第三项开始各项均为前两项之和。用数学公式表示出来就是:
               1                                          (n=1,2)
               fib(n)= fib(n-1)+fib(n-2)       (n > 2 )

    1.递归法
    这种方法的优点是简洁和容易理解,缺点是时间复杂度太大,随着n的增大,运算时间将会急剧增加。因此在很多场合这种方法是不可取的。
    使用这种方法的关键代码是:

    int fib(int n)

    {

        if(n == 1|| n== 2)
        {
             return 1;
        }
        else
        {
             return fib(n - 1) + fib(n - 2);
        }

    }

     

    2.迭代法
    这种方法相对于递归法来说在时间复杂度上减小了不少,但代码相对就要复杂些了。它的思想是这样的,假设开始时f0=1,f1=1,

    currentFib表示当前斐波那契数,则:

    int fib(int n)

    {

        for(i = 1;i < n;i++)
        {
             currentFib = f0 + f1;
             f0 = f1;
             f1 = currentFib;
        }

        return currentFib;

    }
    这样迭代结束和currentFib就是fib(n)了。

    3.总结

    递归法有很多重复运算,而迭代法由于每次都保存了前两个数的值,不存在重复运算,所以效率高!

  • 相关阅读:
    phalcon——HTTP 请求
    phalcon——闪存消息
    phalcon——验证
    Java 字符串分隔 split
    Eclipse "R cannot be resolved"问题
    Android CountDownTimer 类实现倒计时
    Eclipse 打开时“发现了以元素'd:skin'”开头的无效内容。此处不应含有子元素
    Android Studio 设置/更改 SDK 路径
    Android 开发使用自定义字体
    Android Studio "ADB not responding"
  • 原文地址:https://www.cnblogs.com/wufengv5/p/3131810.html
Copyright © 2011-2022 走看看