Обратная строка рекурсивно в C с функцией putback
Поэтому в качестве домашнего задания мне нужно рекурсивно реализовать функцию reverseRec. Я не могу использовать какие-либо циклы, но должен использовать функцию putBack в ней, и функция должна что-то возвращать, что делает все излишне сложным.
#include "stdio.h" #include "stdlib.h" int length(char *s) { int n = 0; while(*s != '\0') { n++; s++; } return n; } void copy(char* s, int n, char* t) { int i = 0; while(i < n) { t[i] = s[i]; i++; } } char* putBack(char* s, char c) { const int n = length(s); char* r = malloc(sizeof(char) * (n+2)); copy(s, n, r); r[n] = c; r[n+1] = '\0'; return r; } char* reverseRec(char *s){ if(*s){ reverseRec(s+1); s = putBack(s, *(s-1)); //??? } return s; } int main() { printf("%s", reverseRec("ABC")); }
Что я уже пробовал:
Поэтому после того, как рекурсия достигает конца строки, она возвращается. Если, например, строка "ABC", то она идет ABC-->BC-->C-->/0-->С-->БC-->ОдинДО Н.Э.. Моя идея состояла в том, что я каким-то образом сохраняю начало строки (*s) каждого возвращающегося возврата и добавляю их вместе с функцией putBack к АНАЛИЗ Но я думаю, что это не может сработать, так как это рекурсия, а это значит, что я ничего не могу сохранить из любой глубины рекурсии, потому что это будет переписано, верно? Я чувствую, что мне чего-то не хватает в том, как рекурсии и буферы работают в C, но idk.