问题是“编写一个在输入 -1 时结束的递归函数,然后返回扫描偶数的次数。
naturals(int);
static void main() {
int num;
printf("enter numbers\n");
scanf("%d", &num);
naturals(num);
}
naturals(int num) {
int count = 0;
if (num % 2 == 0) {
count++;
}
if (num == -1) {
printf("%d", count);
return 0;
}
scanf("%d", &num);
return naturals(num);
}
我知道它在函数开始时将“count”重置为 0,我该如何解决这个问题?
最佳答案
这是一个利用 ?:
的好地方运算符:
#include <stdio.h>
int naturals(int count)
{
int num;
scanf("%d", &num);
return num == -1 ? count : naturals(num % 2 == 0 ? count+1 : count);
}
int main(int argc, char **argv)
{
printf("enter numbers\n");
printf("even numbers entered = %d\n", naturals(0));
}
我经过这里0
作为调用 naturals
中的初始计数在main
,然后对于输入的每个数字 count
如果数字是偶数则递增;否则我们只传递未递增的 count
到下一次调用naturals
。在递归调用 naturals
之前我们检查输入的数字是否为-1;如果是,我们返回 count
的当前值,否则我们继续递归调用 naturals
.
如果您愿意,return
线路 naturals
可以替换为
if(num == -1)
return count;
else if(num % 2 == 0)
return naturals(count+1);
else
return naturals(count);
其功能相同。它的缺点是具有三个独立的 return
IMO 中的陈述更令人困惑,但是 YMMV。
关于c - 使用递归扫描多个数字并计算扫描了多少个偶数(在c中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59488505/