算法

来源:互联网 发布:350淘宝模板怎么样 编辑:程序博客网 时间:2024/06/15 18:00

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

问题描述:

算法:有一座高度是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);    }

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

原创粉丝点击