python数据结构——递归recursion

这篇博客介绍了递归的概念,通过计算数字列表的和来展示递归的使用,解释了递归的三大定律。接着,通过将整数转化为任意进制表示的字符串形式来进一步阐述递归的应用。文章还探讨了递归函数的栈帧实现,并通过图示帮助读者理解递归执行的过程。
摘要由CSDN通过智能技术生成

什么是递归

递归是一种解决问题的方法,它把一个问题分解为越来越小的子问题,直到问题的规模小到可以被很简单直接解决。通常为了达到分解问题的效果,递归过程中要引入一个调用自身的函数。乍一看,递归算法并没有什么特别的地方,但是,利用递归我们能够写出极为简明的解决问题的方法,而且如果不用递归,这些问题将具有很大的编程难度。

计算数字列表的和

我们先从一个简单的问题开始我们的探究,这个问题不需要递归也可以解决。假如你想对一个数字列表进行求和(例如[1,3,5,7,9]),代码所示的是一个通过迭代函数(for 循环)求和的程序。这个函数用一个变化着的“累加器”变量(theSum)对列表里面所有的数进行累加求和,也就是从 0 开始,依次加上列表中的每个数。

def list_sum(num_list):
        the_sum = 0
        for i in num_list:
            the_sum = the_sum + i
        return the_sum
print(list_sum([1,3,5,7,9]))

现在,假设我们不能使用 while 循环或者 for 循环,那么你会如何对数字列表中的数进行求和呢?如果你是个数学家,那么你首先想到的也许是:按照定义,加法是一个有两个参数——两个数字——的函数。为了将数字列表的问题重新定义为对两个参数求和的问题,我们可以利用全括号的表达式来重新表示列表,就像这种形式:(1+(3+(5+(7+9))))。

我们注意到最内层的括号中是(7+9),这是不需要任何循环或者特殊的结构就能解决的。事实上,我们可以用以下一系列简化后的式子来计算最终的加和。那么我们怎样将这个思想转化为 Python 代码呢?首先让我们从 Python 列表的角度来重新叙述这个问题。由于数字列表的和是列表中的第一个元素(numList[0])和剩下所有的元素(numList(1:))之和的和,求和问题可以归纳成以下的式子:listSum(numList)=first(numList)+listSum(rest(numList))

在这个等式中,first 代表列表中的第一个元素,而 rest 代表的是列表中除了第一个元素以外
的其他所有元素。此式很容易在 Python 中用代码表示出来。

def list_sum(num_list):
    if len(num_list) == 1:
        return num_list[0]
    else:
        return num_list[0] + list_sum(num_list[1:])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值