• 20190108-使用递归函数实现求最大公约数等基本递归函数的用法


    1. 给定a = [1,2,[3,4,[5,6,7,[8,9,[10,11]]]]],要求打印输出:1,2,3,4,5,6,7,8,9,10,11

    使用递归函数遍历a,当a的值为list,继续调用递归函数,一层一层的取值

    def iter_list(l):
        for i in l:
            if isinstance(i,list):
                iter_list(i)
    #当当前传入的列表里面的元素为list的时候,调用递归函数
            else:
                print(i,end =' ')
    iter_list(a)

    2.在第1题的基础上将生成结果为一个列表

    #方法1
    def iter_list(l,result=[]):
        #result是默认参数,当不传值的时候使用result=[],当传值的时候使用传入的值
        for i in l:
            if isinstance(i,list):
                iter_list2(i,result)
            else:
                result.append(i)
        return result
    print(iter_list(a))
    #方法2
    def iter_list2(l,result):
           for i in l:
            if isinstance(i,list):
                iter_list2(i,result)
            else:
                result.append(i)
        return result
    result =[]
    print(iter_list2(a,result))

     3.递归写一个方法输出n,n-1....10,9,8。。。1到0结束

    #算法:打印每个数,当次数小于0的时候退出递归
    def output_num(n):
        print(n)
        if n>0:
            output_num(n-1)
        else:
            print('——-————')
    output_num(5)

     4.使用递归函数写一个求最大共约束的方法

    #算法:最大公约数使用辗转相除法
    求(319,377):
    ∵ 319÷377=0(余319)
    ∴(319,377)=(377,319);
    ∵ 377÷319=1(余58)
    ∴(377,319)=(319,58);
    ∵ 319÷58=5(余29)
    ∴ (319,58)=(58,29);
    ∵ 58÷29=2(余0)
    ∴ (58,29)= 29;
    ∴ (319,377)=29

    def find_max_common_divisor(a,b):
        if a<b:
            a,b = b,a
            print(a,b)
           #保证a>b
        if a%b!=0:
            print('a%b分支被执行')
            temp = b
            b = a%b
            a = temp
            print(a,b)
            return find_max_common_divisor(a,b)
            #return有短路效果,后面的语句不执行
        else:
            return b
    print(find_max_common_divisor(319,377))

     5.递归实现嵌套列表求和

    s=[[14, 80, 35], [3, 63, 50], [28, 80, 27], [32, 56, 3]]

    def iter_sum(s):
        result =0
        for i in s:
            print(type(i))
            if isinstance(i,list):
                print('if分支被执行i:',i,'result:',result)
                result +=iter_sum(i)  
    #此处一定要result+=iter_sum(i),最终遍历出所有列表的值
            else:
                result +=i
                print('else分支被执行',result)
        return result
    print(s)
    print(iter_sum(s))
  • 相关阅读:
    MIX11大会WP7主题演讲中文字幕版
    日本战神——源义经
    System.Web.HttpUtility for .Net Compact Framework
    VS2010 SP1
    <如何成为一个成功的职业经理人>读书笔记2
    <左手曾国藩,右手胡雪岩>读书笔记
    <福布斯荐75本经商必读06基业长青>读书笔记
    <中国人聪明之道>读书笔记
    <浮沉>读书笔记
    <79个潜规则:改变生活的心理学法则>读书笔记
  • 原文地址:https://www.cnblogs.com/hyj691001/p/10241211.html
Copyright © 2020-2023  润新知