为什么会返回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)
答案 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