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

时间:2018-01-16 23:31:11

标签: 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);


}

它假设得到数字并计算有多少奇数并将其作为值返回,有人可以向我解释为什么它不起作用,提示和想法将受到高度赞赏。

2 个答案:

答案 0 :(得分:4)

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

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

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

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

另外,请不要使用printf来调试代码,使用正确的调试器。

答案 1 :(得分:1)

正如你所说,你应该归还一些东西。因此,请确保返回一些内容,即添加缺少的返回语句。当你达到零时终止递归,或者你将有一个无限循环。

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) return countOdd(num / 10, count + ONE);
    printf("test");
    return countOdd(num / 10, count);
}