python函数没有返回正确的值 def myLog(x,b): def日志调用(x、b、cnt): 如果(int(x)
此函数应返回值4。但它不会返回任何结果。当我打印cnt的值时,我看到了正确的值。但是当我返回它时,得到的值为None您没有返回递归调用:python函数没有返回正确的值 def myLog(x,b): def日志调用(x、b、cnt): 如果(int(x),python,function,return,Python,Function,Return,此函数应返回值4。但它不会返回任何结果。当我打印cnt的值时,我看到了正确的值。但是当我返回它时,得到的值为None您没有返回递归调用: def myLog(x,b): def logCall(x,b,cnt): if (int(x) < b): return cnt else: cnt+= 1 logCall(int((int(x)/b)),b,cnt) return
def myLog(x,b):
def logCall(x,b,cnt):
if (int(x) < b):
return cnt
else:
cnt+= 1
logCall(int((int(x)/b)),b,cnt)
return logCall(x,b,0)
res=myLog(16,2)
print res
相反,您的函数只在此处结束,并返回None
,这是函数在没有显式return
的情况下结束时的默认值
返回递归结果:
else:
cnt += 1
logCall(int((int(x)/b)),b,cnt)
递归调用不会神奇地使调用帧返回;对logCall()
的调用与任何其他函数调用一样,仍然需要处理返回的值
更改后,代码将返回预期值:
else:
cnt += 1
return logCall(int((int(x)/b)),b,cnt)
一个变体,Python3闭包
def myLog(x, b, cnt=0):
if x < b:
return cnt
return myLog(x // b, b, cnt + 1)
def myLog(x,b):
def日志调用(cnt=0):
非局部x
如果x
对于Python2闭包,传递列表
def myLog(x,b):
def logCall(cnt=0):
nonlocal x
if x < b:
return cnt
x /= b
return logCall(cnt+1)
return logCall
res=myLog(16,2)
res()
def myLog(l):
def日志调用(cnt=0):
如果l[0]
这种尾部递归函数只是要求将其转换为迭代解!明亮的非常感谢您的帮助为什么这里需要进行类型转换if(int(x)
因为我们只传递整数值?@AvinashRaj:我没有查看实际的代码本身。说得好。
def myLog(x,b):
def logCall(cnt=0):
nonlocal x
if x < b:
return cnt
x /= b
return logCall(cnt+1)
return logCall
res=myLog(16,2)
res()
def myLog(l):
def logCall(cnt=0):
if l[0] < l[1]:
return cnt
l[0] /= l[1]
return logCall(cnt+1)
return logCall
res=myLog(16,2)
res()