草庐IT

递归图

全部标签

python - 如何在递归函数中更正 "TypeError: ' NoneType' 对象不可订阅?

defAncestors(otu,tree):iftree[otu][0][0]==None:return[]else:return[otu,tree[otu][0][0]]+Ancestors(tree[otu][0][0],tree)问题本质上是在某些时候,函数试图调用一个None的东西,而不是函数返回我想要的列表。我认为if语句已经说明了这一点,但看来我错了。有什么建议吗?Traceback(mostrecentcalllast):File"",line1,inAncestors('A',a)File"C:\x.py",line129,inAncestorsreturn[otu,

python - 如何交错或创建两个字符串的唯一排列(无递归)

问题是打印两个给定字符串的所有可能交错。所以我用Python编写了一个工作代码,运行如下:definter(arr1,arr2,p1,p2,arr):thisarr=copy(arr)ifp1==len(arr1)andp2==len(arr2):printarr(thisarr)elifp1==len(arr1):thisarr.extend(arr2[p2:])printarr(thisarr)elifp2==len(arr2):thisarr.extend(arr1[p1:])printarr(thisarr)else:thisarr.append(arr1[p1])inter(

python - 递归闭包中的作用域错误

为什么这样做:deffunction1():a=10deffunction2():printafunction2()但这不是:deffunction1():a=10deffunction2():printaa-=1ifa>0:function2()function2()我收到这个错误:UnboundLocalError:localvariable'a'referencedbeforeassignment 最佳答案 该错误似乎并没有很好地描述根本问题。Mike解释了这些消息,但这并没有解释根本原因。实际的问题是在python中你不能赋

python - 在 Python 中对无限循环使用无限递归是一种罪过吗?

这个问题更多的是关于好奇心而不是实用性。如果我正在编写一个应该永远运行的函数,例如守护进程,如果我从函数末尾再次调用该函数,Python将如何处理它?defdaemonLoop():#Declarelocals#DostuffdaemonLoop()我相当确定在C中执行此操作会导致堆栈溢出,但考虑到从C到Python的抽象级别,我猜是处理方式不同。我会为此下hell吗? 最佳答案 在几乎所有会导致堆栈溢出的Python解释器中,就像在C中一样。允许这种情况的更高级别的功能称为TailCallOptimization。或尾递归消除,以

python - 用于展平嵌套列表的递归生成器

我是一名编程新手,在理解我的Python教科书(MagnusLieHetland的“Python入门”)中的示例时遇到了一些困难。该示例适用于设计用于展平嵌套列表元素(具有任意深度)的递归生成器:defflatten(nested):try:forsublistinnested:forelementinflatten(sublist):yieldelementexceptTypeError:yieldnested然后您将按如下方式输入嵌套列表:>>>list(flatten([[[1],2],3,4,[5,[6,7]],8]))[1,2,3,4,5,6,7,8]我理解flatten()

python - 递归计算字符

defcount_m_recursive(sentence):s=len(sentence)ifs==0:return0elifsentence[0]=='m':return1else:returncount_m_recursive(sentence[1:s-1]这是我的代码。所以如果count_m_recursive('myohmy')我应该得到2代码有什么问题? 最佳答案 有两点是错误的:您将在每次递归调用中截断最后字符:returncount_m_recursive(sentence[1:s-1])不要限制对s-1的调用,结束

Python 使用递归反转字符串

我想使用递归来反转python中的字符串,以便它向后显示字符(即“Hello”将变为“olleh”/“olleh”。我写了一个迭代的方法:defReverse(s):result=""n=0start=0while(s[n:]!=""):while(s[n:]!=""ands[n]!=''):n=n+1result=s[start:n]+""+resultstart=nreturnresult但是我究竟该如何递归地执行此操作?我对这部分感到困惑,特别是因为我不怎么使用python和递归。如有任何帮助,我们将不胜感激。 最佳答案 de

python - Python中树的递归函数

我正在尝试在Python中创建一个函数,该函数采用树的任意节点,并根据给定的节点填充列表列表。给定以下错误绘制的树:例如,如果我们从节点5开始,我们应该得到:包含具有相同父节点的所有节点的列表,包括我们从(4和5)开始的节点任何子节点,但不是它们的子节点(6)。父节点和具有相同父节点的任何父节点,以及它们的父节点等,直到我们到达根节点,但不包括根节点(在这种情况下只是2和3,但如果树更深我们从较低的地方开始,这里会有更多。节点应该以列表的列表结束,每个深度一个列表。python中的节点:nodes=[{'id':1,'parent':None},{'id':2,'parent':1},

Python:在不使用 `setrecursionlimit` 的情况下 pickle 高度递归对象

在尝试pickle一个高度递归的树对象时,我遇到了RuntimeError:maximumrecursiondepthexceeded。很像thisaskerhere.他通过使用sys.setrecursionlimit设置更高的递归限制解决了他的问题。但我不想那样做:我认为这更像是一种解决方法,而不是解决方案。因为我希望能够pickle我的树,即使它们中有10,000个节点。(目前它在200左右失败。)(另外,每个平台的真正递归限制是不同的,我真的很想避免打开这个蠕虫jar头。)有没有办法从根本上解决这个问题?如果只有pickle模块使用循环而不是递归进行pickle,我就不会遇到这

python - 突破递归函数?

我想知道如何跳出主函数的递归循环。我正在尝试做一个简单的回文练习。该函数应该为"redivider"返回True,但是returnTrue被传递给is_pal()并且函数没有中断。除了向is_pal添加第二个变量来跟踪True/False,跳出此递归循环的正确方法是什么?deffirst(word):returnword[0]deflast(word):returnword[-1]defmiddle(word):returnword[1:-1]defis_pal(str):iflen(str)==1:returnTrueiffirst(str)==last(str)andlen(str