【问题标题】:Python: Recursive function to calculate inverse power produces weird resultsPython:计算逆幂的递归函数会产生奇怪的结果
【发布时间】:2020-07-17 13:02:50
【问题描述】:

我写了两个递归函数(只是为了理解递归)来计算一个数字的负指数。第一个效果很好,但第二个在某些情况下会产生奇怪的结果。例如- power_recur(3,-1) 产生 .33 是正确的,但 power_recur(3,-2) 它产生 1。

此外,对于 power_recur2(3,-2),如果我将 return 1/v 更改为仅返回 v,它会返回 9。但是当将其更改回 return 1/v 时,它会返回 1 而不是返回 1/9。我知道我可以只使用第一个函数来完成这项工作,但我想知道为什么第二个函数 (power_recur2) 不起作用?

这行得通:

def power_recur(x, exp):
    if exp < 0:
        exp = abs(exp)
        if exp == 0:
            z = 1
        else:
            z = x * power_recur(x, exp-1)
        return 1/z

    if exp == 0:
        return 1
    else:
        return x * power_recur(x, exp-1)

这不起作用:(为 power_recur2(3,-2) 生成 1)

def power_recur2(x, exp):
    if exp < 0:
        if exp == 0:
            v = 1
        else:
            v = x * power_recur2(x, exp+1)
        return 1/v

    if exp == 0:
        return 1
    else:
        return x * power_recur2(x, exp-1)

【问题讨论】:

    标签: python recursion


    【解决方案1】:

    正确的代码是这样的。

    def power_recur2(x, exp):
        if x == 0:
            return 0
    
        if exp < 0:
            return (1/x) * power_recur2(x, exp+1)
    
        if exp == 0:
            return 1
        else:
            return x * power_recur2(x, exp-1)
    

    祝你好运

    【讨论】:

    • 谢谢!你能告诉我为什么我的代码不起作用吗?像我一样在递归函数中使用变量赋值总是错误的吗?
    • 在第二个函数中,你每次都在求结果的倒数,这是错误的,跟踪代码,你会明白的。
    猜你喜欢
    • 1970-01-01
    • 2021-11-19
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    • 1970-01-01
    相关资源
    最近更新 更多