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

C语言递归统计数字奇偶位数的代码问题及多值返回咨询

问题原因
  • 局部变量独立性:digits函数内定义的odd、even为自动局部变量,每次递归调用都会生成独立的新实例,调用结束后立即销毁,各层递归的计数无法跨调用累加。
  • 递归返回值未处理:代码中调用digits(n/10)后未接收、处理其返回结果,下层递归的统计值无法传递到上层调用。
  • C语言原生仅支持单返回值,无法通过return语句直接返回两个统计结果。
修复方案

采用指针传参实现多值传递:将计数变量的地址传入递归函数,所有递归层级操作同一块内存的计数值,即可解决变量重置问题,同时拿到两个统计结果。
修正后代码如下:

#include <stdio.h>

void digits(int n, int *odd, int *even) {
    if (n == 0) {
        return;
    }
    int r = n % 10;
    r % 2 == 0 ? (*even)++ : (*odd)++;
    digits(n / 10, odd, even);
}

int main() {
    int n, odd = 0, even = 0;
    printf("type number in:\n ");
    scanf("%d", &n);
    // 处理输入为0的特殊场景
    if (n == 0) {
        even = 1;
    } else {
        digits(n, &odd, &even);
    }
    printf("奇数位个数:%d\n偶数位个数:%d\n", odd, even);
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:45:03