作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
def A(x, y):
if x == 0:
return y + 2
if y == 0:
return A(x - 1, 1) + 1
return A(x - 1, A(x, y - 1)) * 2
print(A(1, 3))
输出为 60
。我运行了代码,但不知道如何获得该值。很抱歉这个相当愚蠢的问题。
最佳答案
A
似乎是递归的,所以当您调用 A(1,3)
时,它会一直调用自己。
让我们来看看它:
第一次运行时,x != 0
,所以它不会返回 y+2
y != 0
,所以它不会返回 A(x-1, 1) + 1
相反,它返回 A(x-1, A(x, y-1)) * 2
…
对此的看法可以概括为:
A(1,3):
return A(x-1, A(x, y-1)) * 2
return A(0, A(1, 2)) * 2:
A(1,2):
return A(x-1, A(x, y-1)) * 2
return A(0, A(1, 1)) * 2:
A(1,1):
return A(x-1, A(x, y-1)) * 2
return A(0, A(1, 0)) * 2:
A(1,0):
return A(x-1, 1) + 1
return A(0, 1) + 1:
A(0,1):
return y+2
return 3
3 + 1 = 4
return 4
return A(0,4) * 2:
A(0,4):
return y+2
return 6
6*2 = 12
return 12
return A(0, 12) * 2:
A(0,12):
return y+2
return 14
14*2 = 28
return 28
return A(0, 28) * 2:
A(0,28):
return y+2
return 30
30 * 2 = 60
return 60
希望这棵“树”能帮助您直观地了解正在发生的事情。
关于python - 我不明白这个函数是如何工作的,以及它是如何得出 60 的结果的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59546831/
这个问题在这里已经有了答案: Why are these constructs using pre and post-increment undefined behavior? (14 个答案) 关
我是一名优秀的程序员,十分优秀!