从Python中的函数返回值

时间:2019-10-24 10:11:59

标签: python recursion return

为什么会返回None?

def pow(num,num1):
    if num1 < 1:
        print("in if num ",num, "num", num1)
        return num
    else:
        num = num * num
        print("in else num ",num, "num", num1)
        num1 = num1 - 1
        pow(num,num1)

f= pow(2,4)
print(f)

4 个答案:

答案 0 :(得分:1)

除了缺少return语句外,请注意您的逻辑也是错误的。您将在每个步骤中反复对数字进行平方运算,而不是将其与原始数字混用。例如,对于pow(n, 3),您的代码将计算((n²)²)²,而不是n *(n *(n))。另外,为了成为适当的pow函数(假设这就是您要编写的功能),num < 1的情况应返回1,而不是num,以便{ {1}}返回n *(n *(n * 1)),而不返回n *(n *(n * n))。

pow(n, 3)

这样,您将def pow(num, num1): if num1 < 1: return 1 else: return num * pow(num, num1 - 1) 原始值传递给递归调用,而不是平方值。

(话虽如此,对于任何实际应用,您当然应该使用内置的num函数或pow运算符,以防万一您不知道这些。)


  

但是为什么不能从if块返回值呢?如果执行并看到输出,则在每个递归调用中该值都会更新。

您可以计算值并将其存储在 local 变量**中,但这不会更改先前分配给该名称的值(数字是不可变的!)。因此,您需要num才能使其脱离函数。参见以下示例:

return

答案 1 :(得分:0)

因为最后一个pow(num,num1)调用自身而未从调用中获得返回值,更重要的是,不返回它没有得到的返回值:-)

如果返回默认值None以外的值,您可能会发现它工作得更好:

return pow(num,num1)

完成此操作后,您将找到想要的返回值(下面的最后一行):

in else num  4 num 4
in else num  16 num 3
in else num  256 num 2
in else num  65536 num 1
in if num  65536 num 0
65536

答案 2 :(得分:0)

因为您没有在递归调用中返回值:

pow(num,num1)

尝试:

def pow(num,num1):
if num1 < 1:
    print("in if num ",num, "num", num1)
    return num
else:
    num = num * num
    print("in else num ",num, "num", num1)
    num1 = num1 - 1
    return pow(num,num1)

答案 3 :(得分:-1)

根据您的输入,您的代码工作正常。

输出:

    in else num  4 num 4
    in else num  16 num 3
    in else num  256 num 2
    in else num  65536 num 1
    in if num  65536 num 0