Обратный строку рекурсивно


Я просто закончите это упражнение, где я должен изменить строку с помощью рекурсивной функции. Прежде всего, я создал отдельную функцию, называется swap для замены символов, я должен писать его как указатель на функцию?. После того, как я вызвать функцию рекурсивно, пока я добраться до базы случае, если проверка, если переменная "длина" - это 1 или 0, т. к. строка может быть четным или нечетным. Любые советы, чтобы улучшить этот код? я не знаю, что это выглядит довольно некрасиво.

#include <stdio.h>
#include <string.h>

void swap(char arr[], int pos, int pos_2){
  char sent = arr[pos_2];
  arr[pos_2] = arr[pos];
  arr[pos] = sent;

}

void recursive_mirror(char arr[], int lenght){


  if(lenght == 0 || lenght == 1){
    return;
  }

  swap(arr, 0, lenght - 1);
  lenght--;
  recursive_mirror(arr + 1, lenght - 1);

}



int main(void) {

  char arr[] = "mirror";
  recursive_mirror(arr,strlen(arr));
  printf("%s\n", arr);
  return 0;
}


112
1
задан 6 марта 2018 в 01:03 Источник Поделиться
Комментарии
1 ответ


  • swap будет хороший общего назначения своп рутины. Обратите внимание, что в коде вы всегда называете его pos равна 0. Вы должны либо опустить этот параметр избыточным, или сделать swap даже более общего назначения, не предполагая, что семантика параметров, например:

    void swap(char * ptr1, char * prt2) {
    char ch = *ptr1;
    *ptr1 = * ptr2;
    *ptr2 = ch;
    }

    В этой версии ptr1 и ptr2 не обязательно принадлежать к одному спектру.


  • recursive_mirror декременты length дважды, и первый декремента имеет побочный эффект. (Несуществующим) цель данного побочного эффекта требуется усилие, чтобы понять. Прямой

      swap(arr, 0, length - 1);
    recursive_mirror(arr + 1, length - 2);

    кажется более читабельным).


  • Базовый вариант теста может быть if (length < 2).

    Придираться: ваш базовый тесты с треском проваливается на негативное length. Однако, с самого начала мы знали , что length не должно быть отрицательным, поэтому объявив его как unsigned кажется более разумным. По крайней мере, намерения документально.


3
ответ дан 6 марта 2018 в 02:03 Источник Поделиться