c - 递归如何返回值?
问题描述
1. #include<stdio.h>
int recursion_check(int i);
main(){
printf("%d",recursion_check(6));
}
int recursion_check(int i){
if(i==0)
return 5;
else{
recursion_check(i-1);
}
}
我正在从主函数调用一个函数(递归检查)并获取返回值,但在其他情况下没有返回值我如何获得返回值?
解决方案
欢迎来到未定义的行为。
它在您的(假设的)普通计算机上工作的原因是因为在英特尔平台上的寄存器大小或更小的整数返回是通过写入RAX/EAX/AX
寄存器来完成的,因此这些平台上的大多数编译器将避免使用该寄存器进行计算,如果他们可以避免的话它。
因此,当您的函数最终达到有效return
并写入RAX
寄存器,然后从整个调用链中返回时,最初调用您的递归函数的函数将读取RAX
并获得5
一次写入的函数。
当然,没有什么能阻止编译器完全不这样做。它不必使用RAX
,也不必避免将其用于其他计算。因此,未定义的行为。
推荐阅读
- ember.js - 如何查看 Ember FastBoot 完成的请求?
- docusignapi - 无人值守的 API 授权 - 不再可能?
- azure-data-factory-2 - 源为存储过程的 Azure 数据工厂复制活动
- google-chrome - 检测 Chrome 分阶段发布
- javascript - Google Script 电子邮件发送忽略行中的#N/A 值
- multithreading - 并发进程比单个进程慢很多
- maven - 如何在运行时将 jar 文件路径从本地 maven repo 添加到 jenkins 属性
- java - 如何在填充有 5 个随机值和 1 个值为 0 的值中搜索特定值
- r - 执行基本热图时 R 中的错误消息
- c++ - std::less 的编译时“相反”?