Leetcode 斐波那契数列问题

亡梦爱人 提交于 2020-03-13 21:03:43

题目:

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:

F(0) = 0, F(1) = 1

F(N) = F(N - 1) + F(N - 2), 其中 N > 1.

斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。

这道题我们可以用递归或者动态规划来完成。

递归思路——根据给出的斐波那契数列公式,将F(N)视为一个函数,函数求值的过程中不断调用自身。 动态规划——将公式中的F视为一个数组,F(N)即数组中下标为N的值。

递归解法:

class Solution {

    /**
     * @param Integer $n
     * @return Integer
     */
    function fib($n) {
        if($n<2){
		return $n;
	}else{
	return $this->fib($n-1)+$this->fib($n-2);
	}
        
        return $dp[$n];
    }
}

动态规划解法:

class Solution {

    /**
     * @param Integer $n
     * @return Integer
     */
    function fib($n) {
        // if($n<2){
        //     return $n;
        // }
        $dp = ['0'=>0,'1'=>'1'];
        for($i=2;$i<=$n;$i++){
            $dp[$i] = ($dp[$i-1]+$dp[$i-2]) % 1000000007;
        }
        return $dp[$n];
    }
}

斐波那契数列是从1开始的,数组键值不存在负数,在方法中不必考虑负数情况。至于为什么直接列出数组,直接列数组可以省去前置的判断。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!