题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

解题思路

补充:也可以用具体结果推算规律

台阶        跳法
  1          1
  2          2
  3          3
  4          5
  5          8
  6         13
  7         21
  8         34
  ...        ... 
规律:前两位的和等于后面的数,属于斐波那契数列

如果只有1级台阶,那显然只有一种跳法。如果有2级台阶,那就有两种跳法:一种是分两次跳,每次跳1级;另一种就是一次跳两级。将n级台阶时的跳法看成n的函数,记为f(n) 。当n>2时,第一次跳的时候就有两种选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目,即f(n-1) ;二是第一次跳2级,此时跳法数目等于后面剩下的n-2级台阶的跳法数目,即f(n-2) 。因此,n级台阶的不同跳法的总数f(n)=f(n-1)+f(n-2) 。因此这实际上就是斐波那契数列问题。

剑指offer实现

class Solution:
    def jumpFloor( number):
        # write code here
        if number <= 0:
            return 1
        elif number <= 2:
            return number
        else:
            a,b = 1,2
            for i in range(2,number):
                tmp = a+b
                a=b
                b=tmp
                #a,b = b,tmp
            return b

本地实现

def fibo(n):
	if n==1 or n==2:
		return n
	return fibo(n-1) + fibo(n-2)
	
if __name__ == "__main__":
	print(fibo(7))  # 21

版权声明:本文为weixin_38640052原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_38640052/article/details/106688407