递归函数的调用栈过程

程序的执行过程:

  1. main() 函数首先被调用,此时栈底是 main() 的信息。
  2. main() 函数调用 S(1),此时 S(1) 的信息被压入栈中,位于 main() 之上。
  3. S(1) 函数内部调用 S(0),因为 n 不等于 0,所以 S(1) 会递归调用 S(0)。此时 S(0) 的信息被压入栈中,位于 S(1) 之上。

此时栈的状态是:

  • 栈底:main()
  • 中间:S(1)
  • 栈顶:S(0)

因此,选项 A main()->S(1)->S(0) 是正确的。

继续分析剩余的执行过程:

  1. S(0) 执行完毕,返回值 0,此时 S(0) 的信息从栈中弹出。
  2. S(1) 接收到 S(0) 的返回值,计算 S(1) = S(0) + 1 = 0 + 1 = 1,然后 S(1) 的信息从栈中弹出。
  3. main() 接收到 S(1) 的返回值,输出结果 1,然后 main() 的信息从栈中弹出。

最终,栈被清空,程序执行结束。
在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐