《算法图解》递归课后题的思考和解决

递归求列表最大数

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。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容