迭代函数编写问题:迭代次数>0时返回None的原因及修复
递归函数返回None的原因及修复方案
嘿,这个问题其实挺常见的——你的递归函数在iter>0时返回None,核心原因就是你在else分支里调用了递归,但没有把递归调用的结果返回出去。Python里如果函数执行到末尾没有遇到return语句,就会默认返回None,这就是你看到的情况。
快速修复递归版本
只需要在递归调用前加上return关键字,让每一层递归的结果能逐层传递回来:
def function(A,x,c,iter_num): # 这里把iter改成iter_num,避免和内置函数重名 if iter_num == 0: return x else: A = 1/2 * A c = 1/2 * c x1 = 1/2 * x iter_num = iter_num - 1 # 关键:把递归调用的结果return出去 return function(A,x1,c,iter_num)
这样当iter_num>0时,函数就会把每一步计算的结果正确返回,而不是默认的None了。另外提一句:iter是Python的内置函数名,最好别用来当参数名,改成iter_num或者max_iter会更规范,避免潜在的冲突。
额外补充:迭代版本实现(while/for循环)
既然你之前试while和for循环没成功,我也给你写两个迭代版本的实现——毕竟递归在迭代次数非常大的时候可能会触发栈溢出,迭代版本会更稳定:
while循环版本
def solve_with_while(A, x, c, iter_num): current = 0 while current < iter_num: A *= 0.5 c *= 0.5 x *= 0.5 current += 1 return x
for循环版本
def solve_with_for(A, x, c, iter_num): for _ in range(iter_num): A *= 0.5 c *= 0.5 x *= 0.5 return x
这两个版本的逻辑和你的递归完全一致,而且写法更直观,也不用担心递归深度的问题。
内容的提问来源于stack exchange,提问作者David W.
相关产品推荐
相关产品推荐

