You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python递归函数calculate_stock返回值不符合预期的原因及解决方法

问题成因与修复方案

问题成因

核心原因是递归调用没有正确返回结果:

  • 你在if sales_after_stock > 0分支中调用了递归函数calculate_stock,但没有接收它的返回值,也没有将该值向上层调用返回。Python递归的每一层函数的days都是独立的局部变量,深层递归中计算得到的days=64只会在最内层else分支打印,不会自动传递到最外层的调用处。
  • 最外层调用的days初始值为0,第一次进入if分支后仅加1变为1,之后的递归结果没有被接收,最终执行return days时返回的就是这个1,因此最终计算得到xd = 1 + 2 = 3,和你看到的运行结果一致。

修复方案

方案1:修改递归返回逻辑

仅需要在if分支的递归调用前加return,把深层递归的结果逐层返回即可,修改后的代码如下:

def calculate_stock(stock, stock_base_line, days):
    sales_after_stock = stock - (stock_base_line/30)
    if sales_after_stock > 0:
        days +=1
        return calculate_stock(sales_after_stock, stock_base_line, days)        
    else:
        print(days)  
        return days    

修改后调用原逻辑即可得到预期结果66。

方案2:改用循环实现(更稳定)

递归在计算天数较大的场景下存在栈溢出风险,改用循环实现更稳妥,同时也简化了调用参数:

def calculate_stock(stock, stock_base_line):
    days = 0
    daily_sales = stock_base_line / 30
    while stock - daily_sales > 0:
        stock -= daily_sales
        days += 1
    print(days)
    return days

# 调用示例
stock = 123
sales_base_line=57.461538
xd = calculate_stock(stock, sales_base_line) + 2
print(xd)

内容的提问来源于stack exchange,提问作者LP1308

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:15:04