我终于明白递归了吗?还是我大错特错了



首先,当我浏览了许多递归问题以及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("nnRecursion Results are")
rec(3)

分解:

第一个调用:#不是递归,所以-1不适用rec(a(=rec(3(3>因此r=3+rec(3-1(;6〃;作为"-1〃;被忽略

第二次调用:#1st递归,因此减去1rec(a(=rec(2(2>因此r=2+rec(2-1(;3〃;

第三次调用:#2nd递归,所以再次减去11>因此r=1+rec(1-1(;1〃;

由于如果数字不大于"0"则递归结束;0";以及";1〃;是"0"之前的最后一个数字;0";,它的意思是";1〃;是作为输出得到的最终结果。原因是";1〃;显示1st和"1st";6〃;最后显示是由于事实";1〃;是基点或终点;6〃;是倒数开始的地方,以"0"结束;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

最新更新