如何解决递归如何返回值?
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);
}
}
我正在从主函数中调用一个函数(递归检查)并获得返回值,但是在其他情况下我如何获得返回值却没有返回?
解决方法
欢迎使用未定义的行为。
它在您的(应该是)普通计算机上运行的原因是,在Intel平台上寄存器大小或更小的整数返回是通过写入RAX/EAX/AX
寄存器来完成的,因此这些平台上的大多数编译器都将避免使用如果他们可以避免的话,可以注册进行计算。
因此,当您的函数最终到达有效的return
并写入RAX
寄存器,然后从整个调用链中返回时,最初调用递归函数的函数将读取{ {1}},它将得到一次编写的RAX
。
当然,没有什么可以阻止编译器完全不这样做。它不必使用5
,也不必避免将其用于其他计算。因此,行为不确定。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。