我是编程的新手,我正在进行递归练习,其中一个是计算我在一个数字中有多少个奇数:
这是我的代码:
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);
}
它假设得到数字并计算有多少奇数并将其作为值返回,有人可以向我解释为什么它不起作用,提示和想法将受到高度赞赏。
答案 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);
}