Рекурсивная функция для подсчета конкретной цифры - PullRequest
0 голосов
/ 17 ноября 2018

Мне нужно создать рекурсивную функцию, которая подсчитывает 2 и 6 из числа, которое вводит пользователь.

Например, если пользователь вводит 26827, счет равен 3.

. Он работает с определенными номерами и определенными числами, которые он не делает.Может кто-нибудь изменить мою функцию, убедившись, что она рекурсивная и использует очень простой язык C ++, который я использовалСпасибо!(Я считаю, что что-то не так с типом возвращаемого значения.)

int count(int n) {
    static int count = 0; 
    if (n == 2 || n == 6) count++;
    if ((n % 10 == 2) || (n % 10 == 6)) {
        count++; 
        count(num / 10);
    }
    else return count;  
}

Ответы [ 4 ]

0 голосов
/ 18 ноября 2018

Если вы хотите сделать это с помощью рекурсии, вы можете применить еще одну процедуру, используя манипуляции со строками.

Псевдокод:

Function ( int n):
     1. Make n as a string. ( Convert Number to string)
     2. Collect the first character (char C) of the string and remove the character from the string.
     3. Make the main string again as a number n. ( Convert String to Number).
     4. Check the character C , which is number 2 or 6 or not, count it with a flag.
     5. Enter base case for which the recursion will stop.
     6. return the number n , inside the Function (n) for recursion.
0 голосов
/ 18 ноября 2018

Один лайнер для удовольствия.

int f(int n) {
  return n == 0 ? 0 : (n%10==2 || n%10==6) + f(n/10);
}
0 голосов
/ 18 ноября 2018
int count(int n) {
    if(n <= 0) return 0;  // Base Condition
    int countDig = 0;       // Initalizing Count of digits 
    if(n % 10 == 2 || n % 10 == 6)  // Checking whether the LSB is 2 or 6
        countDig ++; // If it is then incrementing the countDig
    countDig += count(n / 10);  // Calling the recurive function by sending the number except its LSB
                        //And incrementing counter according to it
    return countDig;    // Returning the final count
}

вам не нужно иметь счетчик статических значений.Это легко сделать, как указано выше.Пожалуйста, обратитесь к комментариям.Во-вторых, ошибка в вашем коде заключается в том, что вы вызываете рекурсию только в том случае, если младший бит равен 2 или 6. Рекурсию следует поместить вне условия if в вашем коде.Почему вы используете переменную Num.Я думаю, что это должно быть n

0 голосов
/ 17 ноября 2018

Вам не нужна статика Это должно работать (примечание return c + count(n / 10) строка. Вот основная рекурсия здесь)

int count(int n)
{
    int c = 0;
    if(n % 10 == 2 || n % 10 == 6)
        c = 1;
    if(n < 10)
        return c;
    return c + count(n / 10);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...