NO.8 week10 Climbing Stairs




2、How to Solve

思路一:假设S(n) 代表climb n steps有S(n)种ways,那么S(n) = S(n-1)+ S(n-2) -------斐波那契数列

起始:S(1) = 1

    S(2) = 2

然后从后往前(从n开始往前算)。

分析:从后往前递归迭代,虽然思路很清晰,但是相同的子问题需要计算多次。比如:

S(n) = S(n-1) + S(n-2)

S(n-1) = S(n-2) + S(n-3)

扫描二维码关注公众号,回复: 3106478 查看本文章

S(n-2) = S(n-3) + S(n-4)

.......

计算S(n)的时候要计算一遍S(n-1)和一遍S(n-2)

而计算第一遍S(n-1) 的时候,S(n-2)已经计算了第二遍了。当n - 2很大的时候,S(n-2)又要往回由S(n-3)和S(n-4)得到....指数增长。

程序很耗时,复杂度大。

思路二:从前往后计算(从S(1)开始):

分析:显然每个n值只需要计算相对应的S(n)值一次,程序运行时间明显提高。


图二中注释部分为思路一,下面为思路二。

猜你喜欢

转载自blog.csdn.net/its_noah/article/details/70766750