如何跟踪此递归程序

埃里克

我想知道是否有人能够告诉我该程序如何得出正确的答案。我试图跟踪它,但不确定去哪里,因为它有一个or,所以我很困惑应该如何跟踪它。感谢您的澄清。

编写一个函数分区,该分区接受一个数字列表xs,一个起始位置i和一个期望的和,s然后返回TrueFalse取决于是否有可能从其和的位置i正好开始查找列表元素的子序列s注意,总有可能产生一个元素的子序列,其总和恰好为0,即元素的空序列。

def partition(xs,i,s):
    print i,s
    if i == len(xs):
        return s == 0
    else:
        return partition(xs,i+1,s-xs[i]) or partition(xs,i+1,s)
帕德拉克·坎宁安

rcviz模块是一个很好的工具来帮助形象化递归函数:

在此处输入图片说明

边沿按执行遍历的顺序编号。2.边缘从黑色变为灰色,以指示遍历的顺序:黑色边缘在前,灰色边缘在后。

如果遵循编号为1-11的呼叫,您可以确切地看到正在发生的情况,i从开始0到1,2,3,最后到4,左边的最后一个值是,partitition([1,2,3,4],4,-2)因此它返回False s == 0

接下来我们回去的地方,i2再次3,4和结了partitition([1,2,3,4],4,1)这么s == 1一次是False

接下来我们从走一步看6结尾的partitition([1,2,3,4],4,5)地方再一次s == 0为假。

最后,在我们走的时候正确的partitition([1,2,3,4],4,7)一路下跌到partitition([1,2,3,4],4,0)哪里s == 0是真,函数返回True

如果您接听前四个电话,则可以看到流程如何进行以及s的更改方式。

 partitition([1,2,3,4],1,7)  # -> xs[i] = 1 s - 1 = 7
 partitition([1,2,3,4],2,5)  # -> xs[i] = 2 s - 2 = 5
 partitition([1,2,3,4],2,5)  # -> xs[i] = 3 s - 3 = 2
 partitition([1,2,3,4],2,5)  # -> xs[i] = 4 s - 4 = -2
 s == 0 # -> False

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何跟踪此C递归程序

来自分类Dev

如何使C ++递归程序终止

来自分类Dev

为什么此递归程序有效?

来自分类Dev

递归程序流程

来自分类Dev

R中的递归程序

来自分类Dev

Java中的递归程序

来自分类Dev

递归程序永远不会进入递归?

来自分类Dev

递归程序使计算机崩溃

来自分类Dev

Scala中的递归程序无法运行

来自分类Dev

带计数器的递归程序?

来自分类Dev

python递归程序中的混乱

来自分类Dev

递归程序以获取节点的子代

来自分类Dev

C ++ Palindrome Creator递归程序

来自分类Dev

时间复杂度递归程序

来自分类Dev

C++ - 递归程序,分而治之

来自分类Dev

为通用递归程序生成递归树的程序

来自分类Dev

一个人如何计算递归程序的步骤

来自分类Dev

无法理解这个递归程序的计算是如何工作的

来自分类Dev

给定递归程序的空间复杂度

来自分类Dev

Prolog递归程序未返回值

来自分类Dev

递归程序不适用于大输入

来自分类Dev

递归程序:我在做什么错?

来自分类Dev

无法使Pascal的Triangle递归程序正常工作--Java

来自分类Dev

在Scheme中以递归程序合并列表

来自分类Dev

Prolog递归程序未返回值

来自分类Dev

Java 1学生完全迷路了。递归程序

来自分类Dev

C递归程序从数组中找到最大元素

来自分类Dev

我的递归程序未按预期返回树中最小的元素

来自分类Dev

为什么选择排序递归程序的逻辑不正确?