我是编程新手,正在做递归练习,其中之一是计算一个数字中有多少个奇数:
这是我的代码:
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/