首页 / PYTHON / Python 3.2中的递归
Python 3.2中的递归
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python 3.2中的递归,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1663字,纯文字阅读大概需要3分钟。
内容图文
![Python 3.2中的递归](/upload/InfoBanner/zyjiaocheng/756/f0f9691198dc4f3f9c32df79ef42e7dd.jpg)
我试图绕过递归并发布一个工作算法来生成给定列表的所有子集.
def genSubsets(L):
res = []
if len(L) == 0:
return [[]]
smaller = genSubsets(L[:-1])
extra = L[-1:]
new = []
for i in smaller:
new.append(i+extra)
return smaller + new
假设我的列表是L = [0,1],正确的输出是[[],[0],[1],[0,1]]
使用print语句我已经缩小了genSubsets在进入for循环之前被调用了两次.我得到了很多.
但是为什么第一个for循环启动L的值只是[0]而第二个for循环使用[0,1]?包含for循环的递归调用究竟是如何工作的?
解决方法:
我认为使用更长的源列表可以更容易地进行可视化.如果使用[0,1,2],您将看到递归调用反复切断列表中的最后一项.也就是说,recusion建立了一堆递归调用,如下所示:
genSubsets([0,1,2])
genSubsets([0,1])
genSubsets([0])
genSubsets([])
此时它会触及递归算法的“基本情况”.对于此函数,基本情况是指作为参数给出的列表为空.点击基本情况意味着它返回一个包含空列表[[]]的列表.这是堆栈返回时的外观:
genSubsets([0,1,2])
genSubsets([0,1])
genSubsets([0]) <- gets [[]] returned to it
因此返回值返回到先前的级别,并将其保存在较小的变量中.变量extra被指定为仅包括列表的最后一项的切片,在这种情况下是整个内容,[0].
现在,循环遍历较小的值,并将其串联添加到new.由于只有一个较小的值(空列表),new只有一个值,[] [0]为[0].我认为这是你在某些时候打印出来的价值.
然后最后一个语句返回较小和新的串联,因此返回值为[[],[0]].堆栈的另一个视图:
genSubsets([0,1,2])
genSubsets([0,1]) <- gets [[],[0]] returned to it
返回值再次分配给较小,extra为[1],循环再次发生.这次,new得到两个值,[1]和[0,1].它们再次连接到较小的末尾,返回值为[[],[0],[1],[0,1]].最后一个堆栈视图:
genSubsets([0,1,2]) <- gets [[],[0],[1],[0,1]] returned to it
同样的事情再次发生,这次在到目前为止找到的每个项目的末尾添加2.新结束为[[2],[0,2],[1,2],[0,1,2]].
最终返回值为[[],[0],[1],[0,1],[2],[0,2],[1,2],[0,1,2]]
内容总结
以上是互联网集市为您收集整理的Python 3.2中的递归全部内容,希望文章能够帮你解决Python 3.2中的递归所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。