递归能够锻炼我们的逻辑能力和抽象能力。
递归过程中的每一次计算方法都是一样的。
以下是两道网友提出的问题,对于递归的练习非常有帮助。
第一道题目:
list = [{‘name’:’小红’,sub’:[{‘name’:’小明’,’sub’:[{‘name’:’小花’}]},{’name‘:’小黑’}]}]
这是一个嵌套列表,但是嵌套的可能有n层,如何运用递归函数得到列表中所有的“name”值,并且有层级关系的名字需要拼接起来,得到的结果是“[‘小红’,’小红’/’小明,’小红’/’小明/’小花’, ‘小红’/’小黑’]” 。
解题思路:
因为外层的名字要与内层名字拼接,所以每次获取外层的名字,都要作为参数传入内层,最外层参数默认为空字符串;每一次将外层名字与当前层名字拼接后,都判断是否存在下一层,如果存在则将下一层的列表和当前层的拼接结果作为参数进行递归,并将递归结果与当前结果列表合并。
示例代码:
第二道题目:
写出python程序,一定要利用递归函数,尽量不用for循环、while循环。
输入整数B代表进制数,再输入两个B进制的数,用列表list_a和list_b表示,输出list_a+list_b的B进制数结果,也可以用列表来表示。
例如,B=16,输入list_a=[10,9,9]和list_b=[9,9],相加后的十六进制结果是[11,3,2];如果B=11,相加后的结果是[1,0,8,7]。
解题思路:
要注意两点,一点是列表长度可能不一致,另外一点是相加之后大于进制数时需要进位1。
每一次递归,我们都取出两个列表的最后一个元素和进位数一起进行求和。
因为列表元素数量可能不一致,当只有一个列表有元素时,只取出有元素的列表最后一位与进位数求和。
如果列表都为空,存在进位数时,直接返回进位数,否则,返回空列表。
对于每一次递归计算出的和,分别获取进位数和余数,并将余数与外层递归结果合并,将进位数作为参数传入下一次递归。
示例代码: