首页 > 解决方案 > 递归/递归跟踪

问题描述

我正在尝试查看此函数的递归跟踪,但为什么我得到“无”输出?

def fnc(k):
    if k == 0:
        return 0
    fnc(k-1)
    fnc(k-1)
    fnc(k-1)
    fnc(k-1)

标签: pythonrecursion

解决方案


通过手动评估小参数的代码,您的问题实际上很容易识别。假设您传递k = 1fnc

def fnc(k):
    # k == 1 != 0, so we skip the return
    if k == 0:
        return 0

    # Now we call fnc four times with k - 1 = 0 as an argument
    # All four function calls will return 0
    # But we don't use the returned value in any way (no assignment, no return)
    fnc(k - 1)
    fnc(k - 1)
    fnc(k - 1)
    fnc(k - 1)

    # The function ends without returning anything, therefore the return value is None

我不知道您要达到什么目的,但是如果您希望返回基本案例值,则可以这样做:

def fnc(k):
    if k == 0:
        return 0

    return fnc(k-1)

请比较这两个功能,也许可以手动单步执行并尝试了解到底发生了什么。


推荐阅读