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
相关产品推荐
相关产品推荐

