算法 - 斐波那契数列问题(转自微信公众号码农翻身)

注:转自微信公众号漫画:什么是动态规划?

问题描述:

算法:有一座高度是10级台阶的楼梯,从下往上走,每跨一步只能向上1级或者2级台阶。要求用程序来求出一共有多少种走法。
解析:如果只差最后一步就能走完10级台阶,那么有几种情况?应该是2种:最后一步走的是一步或者最后一步走的是两步。现在,我们先不考虑如何从台阶1走到台阶8,也不考虑从台阶1如何走到台阶9。要走到台阶10,要么最后一步走了一步,要么走了2步,也就是要走到第十级,要么从第八级开始走,要么从第九级开始走。现在假设走到第八级有X种走法,走到第九级有Y种走法,那么,走到第十级的方法有多少种呢?
这边是问题的关键点,需要想清楚:走到十级的情况可以分成2部分:a 从第八级走完(X) b 从第九级走完(Y)。因此,走到第十级的总共种数=0到9级台阶的走法Y + 0到8级台阶的走法X
简便表达,把走到十级的方法数量记为F(10),同理,走到九级记为F(9),走到八级记为F(8),那么F(10)=F(9)+F(8)
那么F(9)和F(8)怎么计算呢?
不难想出F(9)=F(8)+F(7) F(8)=F(7)+(6)
那么问题可以归纳如下
F(1)=1
F(2)=2
F(n)=F(n-1)+F(n-2)
聪明的同学应该看出这个是个递归问题,递归公式为
F(n)=F(n-1)+F(n-2)
那么可以写出以下算法:
方法一:递归求解

    public static int getClimbWays(int n){
        if(n <= 0){
            return 0;
        }
        if(n == 1){
            return 1;
        }
        if(n == 2){
            return 2;
        }
        return getClimbWays(n-1)+getClimbWays(n-2);
    }

时间复杂度和空间复杂度(未完)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值