【问题标题】:A Boolean recursive function to tell if a digit appears in an integer an even number of times一个布尔递归函数,用于判断一个数字是否在整数中出现偶数次
【发布时间】:2012-11-14 11:13:19
【问题描述】:

函数获取一个整数和一个数字,并且应该返回 true 如果数字在整数中出现偶数次,否则为假。

例如:

如果digit=1num=1125 该函数应返回true

如果digit=1num=1234 该函数应返回false

bool isEven(int num, int dig)
{
    bool even;

    if (num < 10)
        even = false;
    else
    {
        even = isEven(num/10,dig);

这是我到目前为止所得到的,我被困住了...... 这是作业,所以请不要写答案,而是提示我并帮助我自己完成。

【问题讨论】:

  • sigh...无法弄清楚如何正确编辑代码

标签: recursion


【解决方案1】:

要设置递归,你需要弄清楚两件事:

  1. 基本案例。您可以直接处理的简单案例有哪些?例如,您能否轻松处理一位数?
  2. 将所有其他情况减少到基本情况的规则。例如,你能砍掉最后一位数字,并以某种方式将剩余部分数的解转换为完整数的解吗?

我可以从您的代码中看到您在这两点上都取得了一些进展。然而,两者都不完整。一方面,您永远不会在代码中使用目标数字。

【讨论】:

  • 我不明白我是否应该计算出现次数并最终决定它是否是偶数,或者每次函数识别数字时让布尔变量改变它的值
  • 任何一种方式都可以工作。做任何你认为更容易做对的事情。
【解决方案2】:

表达式 num%10 将为您提供数字的最后一位,这应该会有所帮助。

您的基本情况不正确,因为单个数字可以有偶数个匹配项(零是偶数)。您的递归案例也需要工作,因为您需要反转每个匹配项的答案。

【讨论】:

  • 0 不是有效输入,因为整数必须是自然数(我们从自然数中排除 0)
  • 你不明白。我指的是零作为潜在的匹配数量,而不是输入。例如:num=1234,dig=5。 Dig 出现 0 次,是偶数。
猜你喜欢
  • 1970-01-01
  • 2018-01-16
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 2013-11-05
  • 2013-09-29
  • 2014-01-04
  • 2021-02-09
相关资源
最近更新 更多