c - 使用递归扫描多个数字并计算扫描了多少个偶数(在c中)

标签 c recursion

问题是“编写一个在输入 -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/

相关文章:

c++ - 需要字符表

c++ - 如何使用makefile独立编译和更新一个文件夹下的所有文件

recursion - 在获取递归数据结构的所有权时避免部分移动值?

swift - 将递归异步函数转换为 promise

mysql递归自连接相交列

c++ - 递归反转堆栈

c - 将结构的内容传递给 C 中的另一个变量

c - _mm_movemask_epi8 的内在逆

在C中创建数组列表

asp.net - 如何最好地递归查询 ASP.NET 中的 AD 组成员身份(使用 vb)