gpt4 book ai didi

python - 如何跟踪这个递归程序

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:55 24 4
gpt4 key购买 nike

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

编写一个函数分区,它采用数字列表 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模块是帮助可视化递归函数的好工具:

enter image description here

The edges are numbered by the order in which they were traversed by the execution. 2. The edges are colored from black to grey to indicate order of traversal : black edges first, grey edges last.

如果您跟踪编号为 1-11 的调用,您可以准确地看到发生了什么,i0 开始,然后转到1、2、3 最后是 4,左边的最后一个值是 partitition([1,2,3,4],4,-2) 所以它为 s == 返回 False 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,函数返回 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

关于python - 如何跟踪这个递归程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291019/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com