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

如何编写符合要求的递归函数将列表中整数k的所有倍数移至末尾

代码问题排查

你的代码存在两个核心问题:

  • 递归调用时使用切片num_list[1:]会生成全新的独立列表,后续所有递归操作都在这个新列表上执行,完全不会修改最外层传入的原列表,这是你调用函数后原列表无变化的核心原因。
  • 现有逻辑即便修复传参问题也无法保证元素相对顺序:你把头部遇到的倍数直接追加到列表末尾后,递归跳过了索引0的位置,会导致后续处理逻辑偏移,无法正确遍历剩余元素。
符合要求的实现方案

我们可以通过辅助递归函数,直接在原列表上操作,分别收集非k倍数元素和k倍数元素,最后直接覆盖原列表的内容即可,全程不使用循环,同时保留两类元素的原始相对顺序:

def move_multi(num_list, k):
    # 辅助递归函数:返回(非倍数列表,倍数列表)
    def helper(index):
        # 基线条件:遍历完所有元素
        if index == len(num_list):
            return [], []
        current = num_list[index]
        non_k, k_multi = helper(index + 1)
        if current % k == 0:
            return non_k, [current] + k_multi
        else:
            return [current] + non_k, k_multi
    
    non_k_list, k_list = helper(0)
    # 直接修改原列表内容,保证外部引用的列表生效
    num_list[:] = non_k_list + k_list

测试验证

运行示例代码:

nums = [1, 2, 3, 4, 5, 6, 7, 8]
k = 3
move_multi(nums, k)
print(nums)

输出与预期完全一致:

[1, 2, 4, 5, 7, 8, 3, 6]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 00:24:04