Рекурсивный поворот строки, оценить корректность кода - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет. Закодил следующую ф-ю:
void ReverseStringRecursion(char *str, int i = 0) {
    int size = strlen(str);
 
    if (i < size/2) {
        char temp = str[i];
        str[i] = str[size - 1 - i];
        str[size - 1 - i] = temp;
        ReverseStringRecursion(str, i + 1);
    }
 
}
Нужно уточнить следующее:

1

. По сравнению с for( ; ; ), данный способ, ведь, не самый быстрый и легкий для системы при выполнении?

2

. Можно ли утверждать, что задача соответствует сабжу?

3

. Как бы вы решили данную задачу?

Решение задачи: «Рекурсивный поворот строки, оценить корректность кода»

textual
Листинг программы
#include "greatest.h"
#include <string.h>
 
void ReverseStringRecursion(char *str, int i) {
    int size = strlen(str);
 
    if (i < size/2) {
        char temp = str[i];
        str[i] = str[size - 1 - i];
        str[size - 1 - i] = temp;
        ReverseStringRecursion(str, i + 1);
    }
 
}
 
TEST empty_string()
{
    char* string = "";
    ReverseStringRecursion(string, 0);
    ASSERT_EQ(strcmp(string, ""), 0);
    PASS();
}
 
TEST one_char()
{
    char* string = "a";
    ReverseStringRecursion(string, 0);
    ASSERT_EQ(strcmp(string, "a"), 0);
    PASS();
}
 
TEST two_chars()
{
    char* string = "ab";
    ReverseStringRecursion(string, 0);
    ASSERT_EQ(strcmp(string, "ba"), 0);
    PASS();
}
 
TEST very_long_string()
{
    char* string = "The quick brown fox jumps over the lazy dog.";
    ReverseStringRecursion(string, 0);
    ASSERT_EQ(strcmp(string, ".god yzal eht revo spmuj xof nworb kciuq ehT"), 0);
    PASS();
}
 
TEST two_reversions()
{
    char* string = "The quick brown fox jumps over the lazy dog.";
    ReverseStringRecursion(string, 0);
    ReverseStringRecursion(string, 0);
    ASSERT_EQ(strcmp(string, "The quick brown fox jumps over the lazy dog."), 0);
    PASS();
}
 
SUITE(Test_Reverse_String_Recursion)
{
    RUN_TEST(empty_string);
    RUN_TEST(one_char);
    RUN_TEST(two_chars);
    RUN_TEST(very_long_string);
    RUN_TEST(two_reversions);
}
 
GREATEST_MAIN_DEFS();
 
int main(int argc, char **argv) {
    GREATEST_MAIN_BEGIN();      /* command-line arguments, initialization. */
    RUN_SUITE(Test_Reverse_String_Recursion);
    GREATEST_MAIN_END();        /* display results */
}

Объяснение кода листинга программы

  1. Включаются две библиотеки: greatest.h и .
  2. Создается функция ReverseStringRecursion, которая принимает два аргумента: char *str и int i.
  3. Внутри функции происходит вычисление размера строки с помощью функции strlen.
  4. Затем выполняется проверка: если i меньше половины размера строки, то происходит обмен симвонов str[i] и str[size - 1 - i], после чего рекурсивный вызов функции ReverseStringRecursion с аргументами str и i + 1.
  5. Если условие не выполняется, то происходит выход из рекурсии.
  6. Завершается определение функции ReverseStringRecursion.
  7. Определяются тестовые функции TEST empty_string, TEST one_char, TEST two_chars, TEST very_long_string, TEST two_reversions.
  8. В каждой тестовой функции создается строка с заданным значением, вызывается функция ReverseStringRecursion с аргументами string и 0, после чего происходит сравнение исходной и перевернутой строк с помощью функции strcmp.
  9. Если строки совпадают, то функция PASS завершает работу тестовой функции.
  10. В конце определения тестовой функции TEST two_reversions создается строка с заданным значением, вызывается функция ReverseStringRecursion два раза с аргументами string и 0, после чего происходит сравнение исходной и перевернутой строк с помощью функции strcmp.
  11. Если строки совпадают, то функция PASS завершает работу тестовой функции.
  12. Определяется функция main, которая принимает аргументы argc и argv, инициализирует их, а затем запускает тестовую функцию Test_Reverse_String_Recursion.
  13. В конце функции main выводится сообщение об успешном завершении работы программы.
  14. Завершается определение функции main.
  15. Создается файл greatest.h, который содержит макросы и функции для создания тестовых функций и запуска тестов.
  16. Завершается файл main.c.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.125 из 5
Похожие ответы