Рекурсивный поворот строки, оценить корректность кода - 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. Как бы вы решили данную задачу?

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

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 */
}

8   голосов, оценка 4.125 из 5


СОХРАНИТЬ ССЫЛКУ