void printInt(int n){
if(n==1)
cout<<1<<" ";
else
printInt(n-1);
cout<<n<<" ";
}
我得到的输出是
1 1 2 3....n
我在一张纸上写出了函数的实际步骤,但我不明白它是如何在控制台中打印额外的 1 的(Visual Studio 2010)。这是来自过去的硬件解决方案,所以这只是为了理解它是如何工作的。
你需要一些大括号:
if(n==1)
{
cout<<1<<" ";
}
else
{
printInt(n-1);
cout<<n<<" ";
}
否则cout
即使n==1
. 严格来说,第一个 括号cout
不是必需的,但在这种情况下,我喜欢它的风格。
编辑说明:这个问题可以通过在调试器中单步执行你的函数来轻松解决。
当您没有将 if-else 语句括在大括号中时,它只会执行紧跟其后的行。因此,在您的情况下,该行printInt(n-1);
是 else 语句中的唯一行(在编译器的眼中)。
为避免此类问题,请将整个语句括在大括号中:
void printInt(int n){
if(n==1)
{
cout<<1<<" ";
}
else
{
printInt(n-1);
cout<<n<<" ";
}
}
不幸的是,在 C++ 中没有使用缩进,所以你的代码确实意味着
void printInt(int n){
if(n==1)
cout<<1<<" ";
else
printInt(n-1);
cout<<n<<" ";
}
所以在cout << n << " "
检查之外。
void printInt(int n) {
if (n > 0) {
printInt(n - 1);
cout << n << " ";
}
}