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

递归函数问题:实现将数字的各位存入整数数组

用递归函数提取数字每一位到数组的解决方案

嘿,我懂你想用递归把数字每一位存进数组的需求啦,咱们一步步捋清楚怎么实现这个功能~

核心思路拆解

递归的关键就是把大问题拆成小问题:每次先提取当前数字的最后一位,然后递归处理去掉最后一位后的剩余数字,最后把递归得到的前面几位的数组,和当前提取的数字组合起来,就能得到完整的各位数字数组啦。

这里要注意两个关键点:

  • 终止条件:当数字小于10的时候,说明已经到了最高位,直接返回包含这个数字的数组就行;另外要单独处理输入为0的情况,避免出问题。
  • 递归步骤:
    1. 用num % 10取当前数字的最后一位
    2. 用num // 10(整数除法)去掉最后一位,得到新的数字
    3. 递归调用函数处理这个新数字,得到前面几位的数组
    4. 把当前提取的最后一位加到递归结果的末尾,返回最终数组

Python代码示例(简单直观)

def num_to_array(num):
    # 单独处理输入为0的情况,避免递归返回空数组
    if num == 0:
        return [0]
    # 终止条件:数字只剩一位,直接返回单元素数组
    if num < 10:
        return [num]
    # 先递归处理前面的数字,再加上当前最后一位
    return num_to_array(num // 10) + [num % 10]

# 测试看看效果
print(num_to_array(3562))  # 输出: [3, 5, 6, 2]
print(num_to_array(0))     # 输出: [0]
print(num_to_array(9))     # 输出: [9]
print(num_to_array(12345)) # 输出: [1, 2, 3, 4, 5]

代码唠一唠

  • 先处理输入为0的情况,不然递归到最后会返回空数组,不符合预期
  • 当数字小于10时,就不用再递归了,直接返回包含这个数字的数组就行
  • 拿输入3562举例子:递归调用num_to_array(356)会返回[3,5,6],然后加上最后一位[2],就得到了你想要的[3,5,6,2]

如果是用C语言写的话,思路类似,但要注意数组的内存分配和索引处理,这里也给个参考:

C语言代码示例

#include <stdio.h>
#include <stdlib.h>

// 先算一下数字有多少位,方便分配数组内存
int count_digits(int num) {
    if (num == 0) return 1;
    int count = 0;
    while (num != 0) {
        count++;
        num /= 10;
    }
    return count;
}

// 递归填充数组,先填高位再填低位
void fill_array(int num, int *arr, int index) {
    if (num == 0) return;
    // 先递归处理前面的数字,填到数组的前面索引
    fill_array(num / 10, arr, index - 1);
    // 把当前最后一位填到对应位置
    arr[index] = num % 10;
}

// 主函数:生成数组并返回
int* num_to_array(int num, int *returnSize) {
    *returnSize = count_digits(num);
    int *arr = (int*)malloc(*returnSize * sizeof(int));
    if (num == 0) {
        arr[0] = 0;
        return arr;
    }
    fill_array(num, arr, *returnSize - 1);
    return arr;
}

// 测试一下
int main() {
    int size;
    int *arr = num_to_array(3562, &size);
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]); // 输出: 3 5 6 2
    }
    free(arr); // 别忘了释放内存哦
    return 0;
}

C代码唠一唠

  • 先用count_digits算出数字的位数,这样就能知道要分配多大的数组内存
  • fill_array递归的时候先处理高位,把高位填到数组的前面位置,再填当前的最后一位,这样顺序就对了
  • 同样要单独处理输入为0的情况,直接把数组第一个元素设为0就行

这样不管你用Python还是C语言,都能实现你想要的功能啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:57:36