gpt4 book ai didi

c - 难以理解连续的递归调用

转载 作者:太空宇宙 更新时间:2023-11-04 06:22:49 24 4
gpt4 key购买 nike

我试图理解以下程序,其中存在连续的递归函数调用,但在跟踪如何加载大头钉时感到困惑。

void func(char*);  // function prototype

int main(){
func("123");
return 0;
}

void func(char a[]){
if(a[1]=='\0')
return;
func(a+1);
func(a+1);
printf("%c",a[1]);
}

这个的输出是 3 3 2

如果有人可以就此提出建议,我们将不胜感激......

这种多重递归调用是否以任何方式有益或在特定问题领域找到应用......?

最佳答案

只需将自己置于 CPU 的位置并逐行执行(或使用调试器来帮助完成该任务)。

第一个电话是

func("123")

本次调用不满足终止条件a[1] == '\0',所以调用

func("23");

对 func("23") 的调用依次调用

func("3")

这确实满足返回条件。因此,该调用返回到之前的调用者 func("23")。

由于线路原因,func("23") 继续调用 func("3")

func(a+1);
func(a+1);

继续这个在你脑海中执行程序的过程,并记下每次调用 printf 时会发生什么。这将解释您的输出。

更新

请注意,对 printf() 的调用发生在递归调用之后,例如调用

功能(“123”)

会像这样进行

  • 输入函数(“123”)
  • 不满足终止条件
  • 调用 func("23")
  • 再次调用 func("23")
  • Printf("3")(即 a[1])
  • 返回

关于c - 难以理解连续的递归调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31522098/

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