You need to enable JavaScript to run this app. 为什么Python递归函数单独调用与连续两次调用返回结果不一致
优惠活动
大模型
产品
解决方案
定价
更多

为什么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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 12:45:04