如何解决如果在递归结束时不使用返回,为什么递归函数会产生无法识别的输出?[代码下面]
我刚刚用 C++ 写了一个函数来检查字符串是否是回文。
bool isPal(string str,int s,int e) //s= starting index and e= (size of string -1)
{
if(s==e || s>e)
return true;
if(str[s]!=str[e])
return false;
return isPal(str,++s,--e); //using return
}
调用语句:cout<<isPal("aua",2);
输出:1
在最后删除 return 语句时,该函数产生了一个相当出乎意料和任意(我不确定)的输出。
调用语句:cout<<isPal("aua",2);
输出:144
没有最后的 return 语句,代码看起来是这样的:
bool isPal(string str,int e) //s= starting index and e= (size of string -1)
{
if(s==e || s>e)
return true;
if(str[s]!=str[e])
return false;
isPal(str,--e); //without return
}
这个输出背后的原因是什么?
如果我在递归结束时不使用 return
语句会有什么不同?
Ps:编码环境代码块。
解决方法
根据Function returns value without return statement处的问题,返回值一般存放在EAX
寄存器中。
执行 return ...
写入此寄存器,如果不这样做将产生与未初始化局部变量相同的结果,意思是:“该变量将具有它分配的内存位置中的任何值”。
我个人在这方面最喜欢的经历:一个 bool 变量,在调试器中的值为 42。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。