Рекурсивный поворот строки, оценить корректность кода - 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 (СИ)»
#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
СОХРАНИТЬ ССЫЛКУ