Как я могу преобразовать этот метод в рекурсивный?

#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; }