题解 | NC65 斐波那契数列

斐波那契数列

http://www.nowcoder.com/practice/c6c7742f5ba7442aada113136ddea0c3

方法一:递归法

public class Solution {
    public int Fibonacci(int n) {
        if (n == 1 || n == 2) 
            return 1;
        else 
            return Fibonacci(n-1) + Fibonacci(n-2);
    }
}

对斐波那契数列进行抽象

我想通过对这个规则的抽象,来寻找对这个问题的可能的解法。

对于斐波那契数列,其规则是,从第 3 项开始,每一项的值为其前两项的和。若我对这个规则进行一定的修改,改成:从第 3 项开始,每一项的值为其前两项的差,即满足下式子:

f(n)={n,n=1,2f(n1)f(n2),n>2f(n)=\left\{\begin{matrix} n, n=1,2 \\ f(n-1)-f(n-2),n>2 \end{matrix}\right.

则会得到一个数列: 1,1,0,1,-1,2,-3,5,-8,13,-21

可以看到,对于该数列,将第 4 个元素记为第一个元素,则可以看到后面的数列中,偶数项为斐波那契数列对应项的相反数。这是个有趣的规律。

对斐波那契数列规则进行抽象:

从第三个元素开始,每一个元素的表现为其前两个元素相互作用的结果。

为什么可以用递归模拟斐波那契数列?

对于斐波那契数列,各项值满足下面的表达式:

f(n)={n,n=1,2f(n1)+f(n2),n>2f(n)=\left\{\begin{matrix} n, n=1,2 \\ f(n-1)+f(n-2),n>2 \end{matrix}\right.

其实,观察斐波那契数列的表达式可以发现,其表达式中,就已经可以看到递归。即f(n-1)+f(n-2)这一部分。在式子中,f(n) 的含义就是第 n 项的值,那么 f(n-1) 的含义就是第 n-1 项的值,f(n-2) 以此类推,所以 f(n)=f(n-1)+f(n-2) 所表达的含义为:第 n 项的值,为其前两项的和。因为这一点,想到用递归来模拟斐波那契数列,其实是一个比较自然的想法。

因此,对于题解的方法一,其实只是翻译了一下斐波那契数列的表达式而已。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 15:39
希望奇迹发生的布莱克...:真的是 现在卷实习就是没苦硬吃
点赞 评论 收藏
分享
每晚夜里独自颤抖:你cet6就cet6,cet4就cet4,你写个cet证书等是什么意思。专业技能快赶上项目行数,你做的这2个项目哪里能提现你有这么多技能呢
点赞 评论 收藏
分享
05-16 11:16
已编辑
东华理工大学 Java
牛客73769814...:盲猜几十人小公司,庙小妖风大,咋不叫她去4️⃣呢😁
牛客创作赏金赛
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务