我做了一个递归C++程序,看起来像这样:为什么这种递归在C++中起作用?
using namespace std;
#include <iostream>
bool recursive(int num)
{
if (num == 6)
{
return false;
}
else if (num > 6)
{
return true;
}
else
{
if (recursive(num + 1))
{
return true;
}
else
{
return false;
}
}
}
int main()
{
if (recursive(0))
{
cout << "Not found!" << endl;
}
else
{
cout << "Found..." << endl;
}
}
它的工作原理,我认为这是(大约)做到这一点的最好办法。
我的朋友做了一个简单的递归程序,看起来像这样:
using namespace std;
#include <iostream>
bool recursive(int num)
{
if (num == 6)
{
return false;
}
else if (num > 6)
{
return true;
}
else
{
recursive(num + 1);
}
}
int main()
{
if (recursive(0))
{
cout << "Not found!" << endl;
}
else
{
cout << "Found..." << endl;
}
}
他的作品就像我的做法,但我不明白为什么它的工作原理。对我来说,看起来没有任何东西会在他的else块中返回,所以我不明白布尔值如何返回到原始函数调用。
出于好奇,我在JavaScript中做了一个类似的计划:
function recursive(index)
{
if (index == 6)
{
return true;
}
else if (index > 6)
{
return false;
}
else
{
recursive(index + 1);
}
}
if (recursive(0))
{
console.log("found");
}
else
{
console.log("not found");
}
但JavaScript程序不能正常工作,这让我觉得,这是专门针对C++。
为什么我的朋友的程序工作?它是完全有效的,还是未定义的行为?
你朋友的密码坏了。未定义的行为。 –
您的原始代码有25行。这似乎过分了,实际上,Stack Overflow不会显示完整的代码,读者将被迫在代码框中向下滚动。您可以将相同的功能*舒适地*安装到七条线中。你甚至可以在保持可读性的同时将逻辑减少到一行:'return num <6?递归(num + 1):num> 6;'。但是在实际应用中,您应该放弃递归:'return num> 6;'。 –