zoukankan      html  css  js  c++  java
  • 递归-爬楼梯类似青蛙跳

    用递归将问题分解为规模更小的子问题进行求解

    例题: 爬楼梯
    树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数
    例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一共3种方法。
    输入
    输入包含若干行,每行包含一个正整数N,代表楼梯级数,1<= N <= 30输出不同的走法数,每一行输入对应一行

    爬楼梯
    输出
    不同的走法数,每一行输入对应一行输出
    样例输入
    5
    8
    10
    样例输出
    8
    34
    89

    解题思路:n级台阶的走法 = 先走一级后,n-1级台阶的走法 +先走两级后,n-2级台阶的走法
    递归表达式为:f(n) = f(n-1)+f(n-2)
    边界条件: n = 1,1种走法, n = 2,2种走法

    python代码:

    """
    list = ["a","b","c","d","e","f"]
    i = 1
    for i,j in enumerate(list[i+1:],1):
        #list[2] = "k"
        #if (i < len(list)):
            #print(i,list[i])
        print(i,j)
    
    用递归将问题分解为规模更小的子问题进行求解
    例题: 爬楼梯
    树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数
    例如:楼梯一共有3级,他可以每次都走一级,或者第一次走一级,第二次走两级,也可以第一次走两级,第二次走一级,一
    共3种方法。
    输入
    输入包含若干行,每行包含一个正整数N,代表楼梯级数,1<= N <= 30输出不同的走法数,每一行输入对应一行
    爬楼梯
    输出不同的走法数,每一行输入对应一行输出
    样例输入
    5
    8
    10
    样例输出
    8
    34
    89
    
    有些地方题目类似青蛙跳,原理是一样的
    """
    
    def stairs(n):
    
        if (n == 1):
            return 1
        if (n == 2):
            return 2
        return stairs(n-1)+stairs(n-2)
    
    def main():
        stepNum = int(input("请输入台阶数:"))
        result = stairs(stepNum)
    
        print("台阶数为:%d具有%d种走法!"%(stepNum,result))
    
    if (__name__ == "__main__"):
        main()
  • 相关阅读:
    53. Maximum Subarray
    64. Minimum Path Sum
    28. Implement strStr()
    26. Remove Duplicates from Sorted Array
    21. Merge Two Sorted Lists
    14. Longest Common Prefix
    7. Reverse Integer
    412. Fizz Buzz
    linux_修改域名(centos)
    linux_redis常用数据类型操作
  • 原文地址:https://www.cnblogs.com/an-wl/p/12383286.html
Copyright © 2011-2022 走看看