1. question: 斐波那契数(简单)
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:
F(0) = 0,F(1) = 1
F(n) = F(n - 1) + F(n - 2),其中 n > 1
给定 n ,请计算 F(n) 。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/fibonacci-number
示例 1:
1 | 输入:n = 2 |
示例 2:
1 | 输入:n = 3 |
示例 3:
1 | 输入:n = 4 |
提示:
1 | 0 <= n <= 30 |
2. answers
这道题还是比较简单的,因为题目中准确描述了递推关系,所以可直接递归或者迭代。(注意,这题算是动态规划的入门案例。)
递推关系可以按照递归来实现,递归终止条件就是初始的两个数。代码如下所示:
1 | public class Solution_0111 { |
虽然递归比较简单,但是仔细分析,可以发现,实际上存在重复运算,比如F(n) = F(n-1) + F(n-2)
,但是F(n-1) = F(n-2) + F(n-3)
,因此,可以看到对于F(n-2)则会进行两次递归运算。可采用迭代直接递推即可。代码如下所示:
1 | public class Solution_0111_02 { |
虽然迭代和递归在数量级上是一致的,但是似乎递归是O(2n),还是有一点点差距的。
3. 备注
参考力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com),代码随想录 (programmercarl.com)。