如何修复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
相关产品推荐
相关产品推荐

