青蛙跳台阶的问题

Posted 钟爱一根

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了青蛙跳台阶的问题相关的知识,希望对你有一定的参考价值。

#斐波纳契  一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

# 假设最后一步到X级台阶,有F(X)种走法,
# 这题求的就是F(11)
# 因为每步可以迈1或2级台阶。
# 所以最后一步到11级台阶,
# 而倒数第2步可能是在第10或9级台阶。
# 所以到11级台阶的走法,是到第10或9级台阶走法的和。
# 同样到9级台阶的走法,是到第7或8级台阶走法的和。
# ...................
# F(11)
# =F(9)+F(10)
# =2F(9)+F(8)
# =3F(8)+2F(7)
# =5F(7)+3F(6)
# =8F(6)+5F(5)
# =13F(5)+8F(4)
# =21F(4)+13F(3)
# =34F(3)+21F(2)
# =55F(2)+34F(1)
# 因为:上1级台阶只有1种走法,所以F(1)=1。
# 上2级台阶有2种走法,1步1步走或1次走2步。所以F(2)=2
# F(11)==55F(2)+34F(1)
# =55*2+34*1
# =110+34
# =144
# 上10级台阶一共有144不同的迈法。


# 1,2,3,5,8,13,21
# count=0
#1、
# def fib(n):
#     global count
#     count+=1
#     # count+=1
#     if n<2:
#         return 1
#     return fib(n-1)+fib(n-2)
#
# print(fib(7))
# print("-----------",count) #  fib(n-1)+fib(n-2)有重复运行的问题,运行了21*2-1=41次

#2、
# fib = lambda n: n if n <2 else fib(n - 1) + fib(n - 2)

# print(fib(7))
# print("-----------",count)

#3、
# count = 1
#
# def memo(func):
#     cache={}
#     def wrap(*args):
#         global count
#         count+=1
#         if args not in cache:
#             cache[args]=func(*args)
#             # print(cache)
#         return cache[args]
#     return wrap
#
# @memo
# def fib(n):
#     if n<2:
#         return 1
#     return fib(n-1)+fib(n-2)
#
# print(fib(7))
# print(count)
#运行了13+1=14次

#4、
# count = 1
# def fib(n):
#     global count
#     a,b=0,1
#     for i in range(n):
#         count+=1
#         a,b=b,a+b
#     return b
#
# print(fib(7))  #21
# print(count)    #8


#一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
#1、
# fib = lambda n: n if n < 2 else 2 * fib(n - 1)
# print(fib(7))

#2、
# 1 2 3 4 5 6  7
# 1,2,3,5,8,13,21


# def fib(n):
#     if n<2:
#         return 1
#     return 2*fib(n-1)

#如果n=7,那么return 2*fib(6)

#则:   2*fib(6)=4fib(5)=8fib(4)=16fib(3)=32fib(2)=64fib(1)

#按理来说:  如果有7级台阶,应该有

#解释:走7级台阶,
# 最后一次走1级,那么前面的有fib(6)种方法
# 最后一次走2级,那么前面的有fib(5)种方法
# 。。。。。。
# 最有一次走6级,那么前面的有fib(1)种方法
# fib(7)=fib(1)+fib(2)+fib(3)+fib(4)+fib(5)+fib(6)
# fib(6)=fib(1)+fib(2)+fib(3)+fib(4)+fib(5)
#故,得证!!!

 

以上是关于青蛙跳台阶的问题的主要内容,如果未能解决你的问题,请参考以下文章

青蛙跳台阶

青蛙跳台阶

▷青蛙跳台阶◁

Python算法题——青蛙跳台阶

青蛙跳台阶-普通版-Java实现

剑指Offer变态跳台阶