递归和函数c ++

时间:2018-05-01 17:05:36

标签: c++ function recursion

我已经创建了一个函数,我试图让它递归。有没有人有关于如何使这个函数递归的任何提示?我知道递归意味着在函数本身中使用该函数。

int countEven(int n){
    int evens = 0;
    if(n <= 0) return 0; //base case
    while(n > 0){
        int digit = n%10; //get the last digit
        if(digit%2 == 0){
            evens = evens + 1;
        }
        n = n/10;
    }
    cout << evens;
}

4 个答案:

答案 0 :(得分:3)

int rec(int n)
{ 
  int sum = 0;
  if(n<=0)
    return 0;
  else if ((n%10)%2==0)
    sum = rec(n/10)+1;
  else
    sum = rec(n/10);

  return sum;
}

也许是这样的事情:)

答案 1 :(得分:2)

对于计算整数基数10 偶数,您可以将函数简化为以下

[assembly: AssemblyTitle("Stack Overflow")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("FooBar")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("StackOverflow Test")]
[assembly: AssemblyCopyright("Copyright © fooBar  2018")]

这扩展如下。假设int countEven(int n) { if (n != 0) return !(n % 2) + countEven(n/10); else return 0; }

n = 258

请注意,如果 countEven(258) = 1 + countEven(25) = 1 + 0 + countEven(2) = 1 + 0 + 1 + countEven(0) = 2 为偶数,则!(n % 2)语句会返回 1 ,如果是奇数,则返回 0

如果更短,您可以执行以下操作:

n

使用ternary operator

答案 2 :(得分:1)

好像你正试图计算数字中的偶数位数

int countEven(int n){
    if(n == 0) 
        return 0; //base case
    if (n<10)
        return !(n%2);
    return !(n%2)+countEven(n/10);
}

答案 3 :(得分:0)

看起来像是从QC收到的类似问题。

要使其递归,您必须具有调用自身的函数。询问如何使输入更简单并具有某种基础,以便功能不会中断。

int countEven(int number) {
    if (x <= 0) return 0;
    if (x % 2 == 0) {
       return countEven(number / 10) + 1; 
    }
    return countEven(number / 10)
}