16.2-递归习题

作者: BeautifulSoulpy | 来源:发表于2019-09-18 16:53 被阅读0次

    认知,几乎是人与人之间唯一的本质差别,是不可量化的!

    递归总结:
    1.递归要有边界条件、递归前进段、递归返回段;
    2.递归一定要有边界条件;
    3.当边界条件不满足的时候,递归前进;
    4.当边界条件满足的时候,递归返回;

    递归函数体格式:
    两个变量a,b,+ 边界条件是什么; +计算条件 ;+ return 下级带默认参数的函数体
    一个变量a增加,一个变量b减少; 计算关系是什么;

    多变量递归函数格式
    def 函数名fac(n,target=1): (是带默认参数的函数体*;)
    …… if n == 1:
    ………… return target # 边界条件为 默认参数
    ……target = target
    n #计算条件;
    ……return fac(n-1,target) # return 带默认参数的下级函数体;

    练习1: 求 N 的阶乘;
    方法1: 一个参数递归;
    def fn(n):
        if n == 0:
            return 1
        else:
            return n*fn(n-1)
    fn(6)
    -------------------------------
    720
    
    方法2:多个参数递归;
    递归函数一定要有 边界条件 或者 退出条件;
    
    # 范例:
    def fac(n,target=1):    # 带默认值的函数体
        if n == 1:
            return target    # 边界条件为 默认参数;
        target = target*n     #计算条件;
        return fac(n-1,target)   # return 带默认参数的下级函数体;
    fac(4)
    ----------------------
    24
    
    练习2:将一个数,逆序列放入列表中, 例如1234 => [4,3,2,1]
    # 练习2:讲一个数逆序列放入列表中, 例如1234 => [4,3,2,1]
    
    写法1:
    data = str(1234)
    def revert(x,target=[]):
        if x:
            target.append(x[-1])
            revert(x[:-1])
        return target
    revert(data)
    -------------------------------
    ['4', '3', '2', '1']
    
    写法2
    # 使用数字 整除取模递归;
    def revert(x,target= None):
        if target is None:
            target = []
        x,y = divmod(x,10)
        target.append(y)
        
        if x == 0:
            return target
        return revert(x,target)
    
    print(revert(123045))
    ----------------------------------------------
    [5, 4, 0, 3, 2, 1]
    
    写法3
    data = str(1234)
    def revert(x):
        if x== -1:
            return []
        return [data[x]] + revert(x-1)
    
    print(revert(len(data)-1))
    -----------------------------------
    ['4', '3', '2', '1']
    
    
    总结:
    1.x,y=divmod(x,10)     x=1234除10,x=123,y=10     
    
    练习3:猴子吃桃子问题:第10天早上想吃,只有一个桃子;
    写法1:单参数基本写法
    def nums(n):
        if n == 1:
            return  1
        else:
            return (nums(n-1) + 1)*2
    nums(10)
    

    相关文章

      网友评论

        本文标题:16.2-递归习题

        本文链接:https://www.haomeiwen.com/subject/yztdyctx.html