• python之路---走台阶(递归)


    # 1.楼梯有n个台阶,上楼可以一步上1阶,也可以一步上2阶,一共有多少种上楼的方法?
    # 斐波那契数列  第一项为1 第二项为2 也就是f(n)=f(n-1)+f(n-2),用递归求。
    # 给个分析的例子:
    # 有一个11级的台阶,一个人可走一步也可走两步,问这个人有多少种方法走完这个台阶?
    # 解:
    # ①只用一步走:1+1+1+1+1+1+1+1+1+1+1=11,共11步,只有C11,1=1种走法。
    # ②用了一次两步走:1+1+1+1+1+1+1+1+1+2=11,共10步,有C10,1 =10种走法。
    # ③用了两次两步走:1+1+1+1+1+1+1+2+2=11,共9步,有C9,2 =36种走法。
    # ④用了三次两步走:1+1+1+1+1+2+2+2=11,共8步,有C8,3= 56种走法。
    # ⑤用了四次两步走:1+1+1+2+2+2+2=11,共7步,有C7,4=35种走法。
    # ⑥用了五次两步走:1+2+2+2+2+2=11,共6步,有C6,1=6种走法。
    # 总共有1+10+36+56+35+6=144种
    # 理论上分析:只有一个台阶的话,只有1种走法,2级台阶的话,可以一步一个台阶走,也可以一步2个台阶走,共有2种走法。
    # 当台阶数大于等于3之后,可以这么分析:如果最后一步走一个台阶,那么就是n-1个台阶的走法的种类,如果最后一步走两个台阶,那么就是n-2个台阶的走法的种类,所以n个台阶的走法种类就是n-1个台阶和n-2个台阶的走法的总和。因此,这是一个递归函数。也是一个裴波那契函数。
    
    def step(n): if n == 1: return 1 if n == 2: return 2 else: return step(n-1)+step(n-2) print(step(6))



    # 斐波那契数列
    # 1,2,3,5,8,13,,,,,,,
    def step(n):
    a,b = 1,1
    while n > 1:
    a,b = b,a+b # b = a + b 中的 a 还是原来的a,并不是把b赋值给a后的a
    n -= 1
    return b
    print(step(6))
    # 1. 楼梯有n个台阶,上楼可以一步上1阶,也可以一步上2阶,也可以一步上3阶,一共有多少种上楼的方法?
    # 给个分析的例子:
    # 有一个6级的台阶,一个人可走一步也可走两步也可走三步,问这个人有多少种方法走完这个台阶?
    # 解:
    # ①只用一步走:1+1+1+1+1+1=6,共6步,只有1种走法。
    # ②用了一次两步走:1+1+1+1+2=6,共5步,有C5,1 =5种走法。
    # ③用了两次两步走:1+1+2+2=6,共4步,有C4,2 =6种走法。
    # ④用了三次两步走:2+2+2=6,共3步,有1种走法。
    # ⑤用了一次三步走:1+1+1+3=11,共4步,有C4,1=4种走法。
    # ⑥用了两次三步走:3+3=6,共2步,有1种走法。
    # ⑥用了一次两步和一次三步走:有6种走法。
    # 总共有1+5+6+1+4+1+6=24种
    # 理论上分析:只有一个台阶的话,只有1种走法,
    # 2级台阶的话,可以一步一个台阶走,也可以一步2个台阶走,共有2种走法。
    # 3级台阶的话,可以一步一个台阶走,也可以一步3个台阶走,共有4种走法。
    # 当台阶数大于等于4之后,可以这么分析:如果最后一步走一个台阶,那么就是n-1个台阶的走法的种类,如果最后一步走两个台阶,那么就是n-2个台阶的走法的种类,如果最后一步走三个台阶,那么就是n-3个台阶的走法的种类,所以n个台阶的走法种类就是n-1个台阶和n-2个台阶和n-3个台阶的走法的总和。因此,这是一个递归函数。
    

    def step(n): if n == 1: return 1 if n == 2: return 2 if n == 3: return 4 else: return step(n-1)+step(n-2)+step(n-3) print(step(6))



    # 0,1,1,2,4,7,13,24
    def step(n):
    a,b,c = 0,1,1
    while n > 1:
    a,b,c = b,c,a+b+c # c = a + b + c 中的 a,b 还是原来的a,b,并不是把b,c赋值给a,b后的a,b
    n -= 1
    return c
    print(step(4))
  • 相关阅读:
    Merge Sorted Array
    Remove Duplicates from Sorted List
    Integer to Roman
    String to Integer (atoi)
    Valid Parentheses
    3Sum
    Remove Duplicates from Sorted Array
    Swap Nodes in Pairs
    得到一个Object的属性
    在WebGrid中做 批量删除操作
  • 原文地址:https://www.cnblogs.com/yanyufeng/p/9636491.html
Copyright © 2020-2023  润新知