【发布时间】:2020-08-28 01:10:51
【问题描述】:
所以作为作业,我需要递归地实现 reverseRec 函数。我不能使用任何循环,但必须在其中使用 putBack 函数,并且该函数需要返回一些东西,这使一切变得不必要地复杂。 所以在递归到达字符串的末尾后,它就返回了。如果例如字符串是“ABC”,然后是 ABC-->BC-->C-->/0-->C-->BC--> A公元前。我的想法是,我以某种方式保存每个返回 recusion 的字符串 (*s) 的开头,并将它们与 putBack 函数一起添加到 CBA。但我认为这是行不通的,因为它是一个递归,这意味着我无法从任何递归深度保存任何东西,因为它会被覆盖,对吧? 我觉得我错过了一些关于递归和缓冲区如何在 C 中工作的东西,但是 idk。
#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"));
}
【问题讨论】:
-
相关,您可能会惊讶于
[c] reverse string recursive在该站点的搜索框中返回的点击数。 -
您犯了一个常见的递归初学者错误——
reverseRec()返回一个值,但是当您递归调用它时,您未能处理该返回值。