首先,我知道有人问过递归问题,因为我浏览了其中的许多问题以及 YouTube 和其他来源。我的主要问题是我是否足够了解它的工作原理,还是我错得离谱?
下面是代码以及我个人是如何分解它的:
def rec(a): # will end when the condition is no longer greater than 0
if a > 0:
r = a + rec(a - 1) # decrements -1 each time a recurse happens
print(r)
else:
r = 0
return r
print("\n\nRecursion Results are")
rec(3)
分解:
第一次调用:# 不是递归,所以 -1 不适用 记录(a) = 记录(3) 3 > 0,所以 r = 3 + rec(3 - 1) 等于“6”,因为“- 1”被忽略
第二次调用:# 第一次递归所以减去 1 记录(一)=记录(2) 2 > 0,所以 r = 2 + rec(2 - 1) 等于“3”
第三次调用:# 第二次递归所以再次减去 1 1 > 0,所以 r = 1 + rec(1 - 1) 等于“1”
由于如果数字不大于“0”并且“1”是“0”之前的最后一个数字,则递归结束,这意味着“1”是您将作为输出获得的最终结果。 “1”显示第 1 个而“6”最后显示的原因是因为“1”是 基点或终点,而“6”是倒计时开始的地方,以“1”结束
最佳答案
每一步多加打印语句,应该就清楚了。你的函数只知道 rec(0) = 0 的答案,所以它向下递归直到得到结果,然后开始计算 rec(1) 的答案,等等:
def rec(a): # will end when the condition is no longer greater than 0
print(f'rec({a}) called')
if a > 0:
print(f'Compute {a} + rec({a - 1})')
r = a + rec(a - 1) # decrements -1 each time a recurse happens
print(f'{a} + rec({a - 1}) computes to {r}')
else:
print(f'termination condition: rec({a}) computes 0')
r = 0
print(f'rec({a}) returned {r}')
return r
print("Recursion results are:")
rec(3)
输出:
Recursion results are:
rec(3) called
Compute 3 + rec(2)
rec(2) called
Compute 2 + rec(1)
rec(1) called
Compute 1 + rec(0)
rec(0) called
termination condition: rec(0) computes 0
rec(0) returned 0
1 + rec(0) computes to 1
rec(1) returned 1
2 + rec(1) computes to 3
rec(2) returned 3
3 + rec(2) computes to 6
rec(3) returned 6
关于python - 我终于理解了递归还是我错得离谱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74006668/