c - 递归没有得到我需要的输出

标签 c recursion

我是编程新手,正在做递归练习,其中之一是计算一个数字中有多少个奇数:

这是我的代码:

int countOdd(int num, int count)
{
    int temp;
    printf("num\n%d", num);
    if (num<ZERO)return count;
    temp = num % 10;
    if ((temp % 2) != 0) countOdd(num / 10, count + ONE);
    printf("test");
    countOdd(num / 10, count);


}

它应该获取数字并计算有多少个奇数并将其作为值返回,有人可以向我解释为什么它不起作用,建议和想法将受到高度赞赏。

最佳答案

任何非负值除以 10 都将再次成为非负值。

但是你的递归终止条件是if (num<ZERO)return count; ,这永远不会发生。

代码的固定变体可能如下所示(出于教育原因仍使用递归,否则非递归代码会更好):

int countOdd(int num) {
    if (num <= 0) return 0;
    return (num&1) + countOdd(num/10);
}

也不要使用printf要调试代码,请使用适当的调试器。

关于c - 递归没有得到我需要的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48291471/

相关文章:

c - 8位(两个值)数组到16位数组(一个值)

stdio.h 中的函数 getline() 可以与 K&R88 中的函数共存吗?

java - java 骑士之旅

recursion - 递归遍历当前目录,然后遍历父目录以查找子目录

java - 坚持使用 Java 的递归方法?

c - 用类 C 的脚本语言实现位移运算符

c++ - 使用 'cvMatMul' 时断言错误

math - 当 r < 0 时,(n - (~r % n) - 1) 和 (n - (abs(r) % n)) 之间有区别吗?

ruby - 从子对象引用父对象

c# - 避免 C# 中的递归事件