代码之家  ›  专栏  ›  技术社区  ›  RASEL MAHMUD

为什么以及如何在is_even()函数内的IF条件中递归X变量在满足0后递增?[副本]

  •  0
  • RASEL MAHMUD  · 技术社区  · 3 月前

    我理解递归函数,直到 IF condition 如果满足零,则返回值为True。在the is_odd() 函数,否定会反转此返回值。

    我试着用Python调试器来理解它。为了获得更详细的解释,我上传了一个剪辑。请观看并专注于 local & watch vscode左侧的部分。在哪里? X 变量减小,直到 0 然后增加,直到 invoking value. 这是一个YouTube短片链接: https://www.youtube.com/watch?v=zUbZDCUkwa0&t=15s

    然而,我很好奇这个变量是如何以及为什么存在的 十、 增加(例如,从0到1,2,3,4,5) IF条件 退货 True 它进入的东西越来越多 ELSE condition 直到它达到调用值5或7。

    如果你能给我解释一下,我将不胜感激。

    以下是代码:

    def is_even(x):
        if x == 0:
            bol = True
            return bol
        else:
            ahOdd = x-1
            rtn = is_odd(ahOdd)
            return rtn
    
    def is_odd(x):
        ahEven = is_even(x)
        return not ahEven
    
    invokingOdd = is_odd(5)
    invokingEven = is_even(7)
    print(invokingOdd)
    print(invokingEven)
    

    enter image description here

    1 回复  |  直到 3 月前
        1
  •  0
  •   Lajos Arpad    3 月前
    • is_even(x) 如果满足以下条件,则为真 x 为0
    • is_even(x) is_odd(x-1) 否则
    • is_odd(x) not is_even(x)

    这三条规则都是正确的,因此函数是正确的。实施基本上说 is_odd 总是可以否定 is_even 具有相同的值,而 is_even(x) 等同于 is_odd(x-1) 如果 x 严格来说是正的,如果 x 为0。

    编辑

    x 永不递增。实际上,你从一个值开始, x 在测试中分别为5和7,然后它在内部永远不会改变 is_odd 因此,它在那里没有增加 is_even ahOdd 那就是 x-1 传递给 is_even ,因此 is_even 会变得更小 x 比一个 is_odd 尽管每个函数调用都有自己的版本 x 变量,基本上函数调用越深 x 直到它达到0。

    当它达到0时,平凡的情况得到解决,然后该函数将结果返回给调用它的函数

    • is_even(0)
    • is_odd(0)
    • is_even(1)
    • 已添加(1)
    • is_even(2)
    • 已添加(2)
    • is_even(3)
    • 已添加(3)
    • is_even(4)
    • 已添加(4)
    • is_even(5)
    • 是日(5)

    所以你的is_odd(5)是第一个被调用的函数,它调用了is_even(5),以此类推,然后is_even(0)将结果返回给is-odd(0)。然后is_odd(0)将结果返回给is_even(1)。

    具有较大x的函数确实会调用具有较小x的函数,但一旦x为0的简单情况得到解决,具有较小x函数的结果就会返回给调用者,即具有较大x函数,因此你可能会有x增加的错觉,但实际上它并没有增加。相反,x较大的函数调用会等待x较小的函数调用被求值,一旦结果准备就绪,它就会接管该阶段并完成计算。