为什么Python递归函数单独调用与连续两次调用返回结果不一致
问题原因
- 你使用**全局变量
i**存储递归计数,全局变量仅在脚本初始化时赋值为0,多次函数调用时不会自动重置初始值 - 第一次调用
persistence(39)执行结束后,i已经被累加到3,第二次调用persistence(4)时直接复用了这个残留值,因此返回错误结果;单独调用时i初始值为0,就会返回正确的0
修复方案
最优方案是移除全局变量,将计数作为递归函数的可选参数传递,修正后代码如下:
def m(n): s = [int(char) for char in str(n)] product = 1 for x in s: product *= x return product def persistence(n, count=0): if len(str(n)) == 1: return count j = m(n) return persistence(j, count + 1) print(persistence(39)) print(persistence(4))
该方案每次调用persistence不传count参数时,都会默认初始化count为0,不存在跨调用的变量污染问题,多次调用结果都正常。
如果你必须保留全局变量的写法,可以在函数入口增加顶层调用重置逻辑,不过非常不推荐这种实现方式,全局变量很容易引发不可预期的问题:
def m(n): s= [int(char) for char in str(n)] product = 1 for x in s: product *= x return product i = 0 def persistence(n, is_top=True): global i # 顶层调用时重置计数 if is_top: i = 0 if len(str(n)) == 1: return i j = m(n) i+=1 return persistence(j, is_top=False)
内容的提问来源于stack exchange,提问作者bruhmoment
相关产品推荐
相关产品推荐

