递归的意外行为
Unexpected behavior of recursion
#include <iostream>
using namespace std;
int screw(int x){
if(x==1)
return x;
else
screw(x-1);
}
int main(){
cout<<screw(5)<< endl;
return 0;
}
此代码的输出:1任何人都可以解释螺钉(5),螺钉(4),螺钉(3),螺钉(2)如何在其代码的" else"部分中没有返回语句时返回1。使用呼叫堆栈来解释将不胜感激。关于与之相关的基础知识的任何见解都非常受到欢迎。
在x86体系结构上调用约定中,funtion返回eax寄存器中的值。c更新eax中的"返回val"语句。如果没有明确的"返回阀",则该值恰好是在EAX寄存器中成为函数返回值。在您的示例中,最内向的呼叫在返回时将1个在eax中放在1中,这会传递给所有递归电话。
相关文章:
- 通过递归进行因子分解
- 递归函数计算序列中的平方和(并输出过程)
- 使用递归的数组的最小值.这是怎么回事
- 递归列出所有目录中的C++与Python与Ruby的性能
- 递归计数给定目录的文件和所有目录
- 如何在BST的这个简单递归实现中消除警告
- C++:正在检查LinkedList中的回文-递归方法-错误
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 递归无序映射
- TSP递归解的迭代形式
- 如何在Elixir中调用递归函数并行
- 返回递归调用和仅递归调用的区别
- 使用后序遍历递归的深度优先搜索会产生意外输出
- 递归函数用于计算 n 个数字之和的意外输出
- 递归的意外行为
- 递归返回意外输出
- 当我在递归函数中调用 return 时,我的程序意外完成
- 返回递归函数的bool意外地更改了变量
- 在递归函数中,c++基转换过程中意外输出到屏幕
- 在Visual Studio 2012中,作用域操作符中的错别字会导致意外的编译和递归