void printInt(int n){
if(n==1)
cout<<1<<" ";
else
printInt(n-1);
cout<<n<<" ";
}
我得到的输出是
1 1 2 3....n
我在一张纸上写出了该功能的实际步骤,但我不知道如何在控制台中打印额外的1(Visual Studio 2010)。这是来自过去的硬件解决方案,所以这只是为了解它是如何工作的。
答案 0 :(得分:9)
你需要一些大括号:
if(n==1)
{
cout<<1<<" ";
}
else
{
printInt(n-1);
cout<<n<<" ";
}
或者,即使cout
,第二个n==1
也会运行。严格来说,第一个 cout
周围的大括号不是必需的,但在这种情况下我喜欢它的样式。
编者注:通过在调试器中单步调试函数,可以轻松解决此问题。
答案 1 :(得分:1)
当你没有在大括号中包含if-else语句时,它只会在它后面直接执行该行。所以在你的情况下,行printInt(n-1);
是else语句中的唯一行(在编译器的眼中)。
为了避免这样的问题,请将整个语句括在大括号中:
void printInt(int n){
if(n==1)
{
cout<<1<<" ";
}
else
{
printInt(n-1);
cout<<n<<" ";
}
}
答案 2 :(得分:0)
不幸的是,在C ++中没有使用缩进,所以你的代码确实意味着
void printInt(int n){
if(n==1)
cout<<1<<" ";
else
printInt(n-1);
cout<<n<<" ";
}
所以cout << n << " "
不在支票之内。
答案 3 :(得分:0)
void printInt(int n) {
if (n > 0) {
printInt(n - 1);
cout << n << " ";
}
}