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

如何修复Python递归打印指定倍数时多输出一个的问题?

递归函数print_first_multiples输出多余倍数的问题

问题根源

你的递归终止条件和计数逻辑不匹配:
当传入num_multiples=10时,函数会从num_multiples=10一直递归到num_multiples=-1才触发返回。回溯过程中,会依次打印n*0、n*1……n*10,总共11个值,这就是末尾多出来50的原因。

修复方案

这里提供两种直观的修改思路:

思路1:调整终止条件与打印的倍数计算

修改终止条件为num_multiples == 0,同时把打印的倍数改为n*(num_multiples-1),确保只打印前num_multiples个(从0开始)的倍数:

def print_first_multiples(n, num_multiples):    
    if num_multiples == 0:
        return
    print_first_multiples(n, num_multiples - 1)
    print(n * (num_multiples - 1), end=' ') 

调用print_first_multiples(5,10)时,会递归处理前9个倍数,最后依次打印0到45,正好10个值。

思路2:用当前打印索引作为递归参数

换一种递归逻辑,用current变量记录当前要打印的倍数索引,当索引达到num_multiples时终止:

def print_first_multiples(n, num_multiples, current=0):
    if current >= num_multiples:
        return
    print(n * current, end=' ')
    print_first_multiples(n, num_multiples, current + 1)

调用方式不变(print_first_multiples(5,10)),从索引0开始打印到9,刚好覆盖10个倍数。

递归逻辑要点

递归的核心是明确终止边界和每一步的执行内容:

  • 你原来的代码把终止边界设为num_multiples < 0,相当于允许了从0到10的11次打印;
  • 要打印num_multiples个值,终止边界应该控制在仅触发num_multiples次打印操作,要么让剩余计数到0就停,要么让当前索引达到目标数量就停。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:25:26