#c #recursion
#c #рекурсия
Вопрос:
Метод проверяет количество каждого символа, и если оно равно для каждого символа, он возвращает 1. В противном случае он возвращает 0. Строка передается через str[]. Символ[] имеет каждое значение, равное единице в начале. Трудно представить, что это становится рекурсивным, любая помощь в обучении приветствуется.
int recursionCheckEven(int i, int j, char str[], int chars[20]) { for (i = 0; i lt; strlen(str); i =2) { int count = 0; for (j = i; j lt; strlen(str); j =2) { if (str[i] == str[j] amp;amp; chars[j] == 1) { count ; chars[i] = 2; chars[j] = 2; } } if (count % 2 != 0) { chars[i] = 0; } } for (int k = 0; k lt; 20; k ) { if (chars[k] == 0) { return 0; break; } } return 1; }
Как я это называю:
for (unsigned int i = 0; i lt; stringcount; i ) { int chars[20] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; if(recursionCheckEven(0, 0, strings[i], chars)) { printf("The %dth string has even number of charactersn", i); } }
Комментарии:
1. Не уверен, чего вы ожидаете: у вас есть какая-то задача по созданию рекурсивной проверки или рефакторингу этой конкретной реализации, чтобы она была рекурсивной? Код, представленный выше, имеет проблемы на уровне «алгоритма».
Ответ №1:
Вы можете использовать цикл для прохождения символов нерекурсивным способом (это рекомендуется). Идея рекурсии состоит в том, чтобы избежать использования цикла (что на самом деле не рекомендуется, тратит память стека и вызывает другие проблемы).
Для рекурсивной проверки вы можете использовать указатели, чтобы проверить каждый элемент, затем перейти к следующему элементу и использовать ту же функцию.
Чтобы помочь вам начать работу, это рекурсивная функция, которая берет строку и подсчитывает количество каждого символа.
int recursive(int total, char* ptr, char ch) { if (*ptr == '') return total; if (*ptr == ch) total ; return recursive(total, ptr 1, ch); } int main(void) { char *str = "111"; char ch = '1'; int total = recursive(0, str, ch); printf("total of char %c in %s: %dn", ch, str, total); return 0; }