python - 我终于理解了递归还是我错得离谱?

标签 python python-3.x recursion

首先,我知道有人问过递归问题,因为我浏览了其中的许多问题以及 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/

相关文章:

Python 从 CSV 创建嵌套列表

java - 使用递归查找数组的最小值?

java - For循环不在递归函数中迭代

Python在子目录中打开文件-linux

python - Python Flask 中 ssl_context 选项的区别

python-3.x - 确定 url 是 pdf 还是 html 文件

java - 删除二叉树中的所有叶子

python - 我会赋值还是直接在其他变量中使用它们?

python - torch /Lua 等同于 MATLAB 或 Numpy 的功能 'Unique'

Python 3,Tkinter,如何更新按钮文本