20190108-使用递归函数实现求最大

  • 2020 年 1 月 19 日
  • 笔记

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))