gpt4 book ai didi

c - 这个递归行如何实现打印反转的字符串?

转载 作者:行者123 更新时间:2023-11-30 16:42:00 25 4
gpt4 key购买 nike

简单来说,我需要知道这个功能是如何工作的?里面有什么?传递的字符串如何反转?

这是代码,提前致谢。

#include <stdio.h>
void rev (const char* const);

int main()
{
char str [] = "Hey There";
rev(str);

return 0;
}

void rev(const char* const c)
{
if(c[0]=='\0')
return ;
else
{
rev( &c[1]);
putchar(c[0]);
}
}

编辑:正如评论者所建议的,我将解释我不明白的更多内容。字符串没有颠倒,只是打印颠倒了,Ok Fine。执行此操作的机制是什么?执行顺序是什么?

最佳答案

原因是代码指示它在处理输出当前字符之前执行字符串的其余部分。想象一下字符串“on\0”

rev("on\0");
->rev("n\0");
->rev("\0");
<-return; // hits base case
putchar('n'); // resumes after recursive call
<-return; // invisible return at end of function
putchar('o'); // resumes after recursive call
<-return; // invisible return at end of function

这里的每个标识都代表一个嵌套调用。因此,在基本情况下,您会同时进行 3 次 rev 调用,每次调用都有不同的 c

重要的是要知道 c 对于每次调用都是唯一的,这样当对 rev 的调用返回到之前的 rev c 在被调用者中未更改。这使得它没有什么特别的,所以事实上它的工作方式与每次执行相同操作时调用不同的函数相同。它会在前一个调用返回后恢复。

关于c - 这个递归行如何实现打印反转的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46072099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com