如何解决if语句中的递归函数
用于递归函数,例如
bool recur(int i)
{
int x = i;
if (x == 10)
{
return true;
}
else
{
x++;
recur(x);
}
return false;
}
并在if语句中使用它
if (recur(0))
{
return true;
}
递归是否会在if语句内进行,直到函数返回true?
解决方法
recur()
仅在其参数为true
时返回10
,否则它以递增的参数递归并返回false
:
-
recur(0)
重复10次并返回false
。这些递归调用的所有返回值在调用代码中都会被忽略。因此,在if (recur(0)) return true;
中不会执行return
语句。 -
recur(10)
返回true
,而无需递归。 -
recur(11)
和任何更大的参数将具有未定义的行为:如果将引起无限递归,直到x++
导致具有未定义行为的算术溢出,最有可能导致堆栈之前。 -
一个clever compiler(例如
clang
)将确定recur
是一个纯函数(没有副作用的函数),并在忽略结果的情况下完全删除递归调用,将代码简化为:bool recur(int i) { return (i == 10); }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。