c++ - 为什么在 base call 之后递归又发生了?
问题描述
所以我正在尝试学习 c++,我已经达到了递归的主题,我遇到了一个问题。
void myfun(int n)
{
if(n>0)
{
myfun(n-1);
cout<<n<<endl;
}
else
{
cout<<"Stop"<<endl;
}
}
int main()
{
int n = 5;
myfun(n);
}`
程序的输出是这样的:
stop
1
2
3
4
5
我的问题是,既然 if 语句总是假的,那么函数如何在基本调用之后以相反的方式调用自身,函数不应该结束吗?
解决方案
主myfun(5)
函数调用的控制流分解为(在伪代码中):
call myfun(5)
= [call myfun(4), print "5"]
= [[call myfun(3), print "4"], print "5"]
= [[[call myfun(2), print "3"], print "4"], print "5"]
= [[[[call myfun(1), print "2"] print "3"], print "4"], print "5"]
= [[[[[call myfun(0), print "1"], print "2"] print "3"], print "4"], print "5"]
= [[[[[[print "Stop"], print "1"], print "2"] print "3"], print "4"], print "5"]
其中每一层括号表示对 的递归调用myfun
。
由于您在打印之前进行了递归调用n
,因此输出从最内层调用到最外层调用。
推荐阅读
- godot - 如何通过 gdscript 在移动壁(StaticBody2D)上 Pinjoint2D 飞镖(Kinematicbody2D)
- matlab - 如何在 EEGLab 中读取 .mat 文件?
- spring - 使用响应式 Mongo 查询获取多个 Mono 对象
- twitter-bootstrap - 引导组按钮仍显示单选按钮
- python - 带有Column命令的pyspark数据框不起作用
- php - 登录脚本有时会访问错误的帐户
- react-native - 在 react-native 的其他组件中找不到变量导航
- python - 使用列表理解返回索引
- python - 在 sklearn python 中使用高斯过程回归时出错
- php - PHP:无法访问 JSON 对象/数组