Рекурсии и функции с ++ - PullRequest
0 голосов
/ 01 мая 2018

Я сделал функцию и пытаюсь сделать ее рекурсивной. У кого-нибудь есть какие-либо советы о том, как сделать эту функцию рекурсивной? Я знаю рекурсивные средства использования функции в самой функции.

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 голосов
/ 02 мая 2018

похоже на аналогичный вопрос, который я получил от КК.

чтобы сделать его рекурсивным, вы должны иметь функцию, вызывающую саму себя. Спросите, как можно упростить ввод и иметь какую-то базу, чтобы функция не ломалась.

int countEven(int number) {
    if (x <= 0) return 0;
    if (x % 2 == 0) {
       return countEven(number / 10) + 1; 
    }
    return countEven(number / 10)
}
0 голосов
/ 01 мая 2018

Для подсчета четных цифр целого числа основания 10 вы можете упростить функцию до следующего

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 , если n четное, и 0 , если оно нечетное.

Для краткости вы можете сделать следующее:

int ce(int n) { return n ? !(n&1) + ce(n/10) : 0; }

с использованием троичного оператора .

0 голосов
/ 01 мая 2018

похоже, что вы пытаетесь посчитать четные цифры в числе

int countEven(int n){
    if(n == 0) 
        return 0; //base case
    if (n<10)
        return !(n%2);
    return !(n%2)+countEven(n/10);
}
0 голосов
/ 01 мая 2018
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;
}

Может быть, что-то вроде этого:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...