递归求列表最大数
def max(list):
if len(list)==2:
return list[0] if list[0]>list[1] else list[1]
sub_max = max(list[1:])
return list[0] if list[0]>sub_max else sub_max
my_list =[1,9,5,3,7]
print max(my_list)
本来一直都想不懂9为什么能是sub_max值,它应该是list[0]才对啊,它又不是两个数比较出来的,“血统不纯正”。苦思冥想+n多Debug也无法真正完全说服自己,最后直接开了个word文档手写过程,感觉能说服自己了很多。
my_list =[1,9,5,3,7]
第一次:len(list)不等于2,进入第四行sub_max = max(list[1:]),调用一次函数本身,1被赶出来成为一个独立数,新的list是[9,5,3,7]
第二次:len是4,进入第四行sub_max = max(list[1:]),调用一次函数本身,9被赶出来成为一个独立数,新的list是[5,3,7]
第三次:len是3,进入第四行sub_max = max(list[1:]),调用一次函数本身,5被赶出来成为一个独立数,新的list是[3,7]
第四次:len是2,进入第三行进行比较得7,sub_max =7
————————————————————————————————————
返回第三次:sub_max =7是第四次的结果。此时list [0]=5,这一次调用返回的数字还是9,因为第五行进行了list[0]和sub_max之间的比较。
返回第二次:第三次返回的结果是7也就是说,7是第二次中调用的max函数得到的值。接着第五行进行list [0]=9与sub_max =7的比较,返回9。
返回第一次:第二次返回的结果是9也就是说,9是第一次中调用的max函数所得到的值。接着第五行进行list [0]=1与sub_max =9的比较,返回9。