有人可以解释这个输出吗?(C++)

您好,有人可以解释以下 C++ 代码的输出,尤其是第一个 4321 1223334444输出之后的数字

这是代码:

void rek(int i) { 
if (i > 0){
   cout << i; 
   rek(i-1); 
   for (int k=0; k < i; k++) 
      cout << i; }
}
int main(){
 rek(4);
 return 0;
}

这是输出:

the output is: 43211223334444

回答

所有的麻烦都来自这样一个事实,即您的输出没有在值cout << i;打印中引入任何分离。

您实际上首先得到以下信息:

4, 3, 2, 1 

我们从这两个语句中得到了这一点:

// ...
cout<< i;
rek(i-1);
// ...

每次对 the 的调用都会rek(i)打印它的 current i,然后调用rek(i-1),而在继续执行函数体之前,它必须打印它i-1,然后调用rek((i-1)-1)... 依此类推,直到遇到i < 0案例。

剩下的部分由1一次、2二次、3三次、4四次的输出给大家带来。都是因为for循环:

for (int k=0; k < i; k++) // print the value of i, i times
      cout << i;

因此,您基本上拥有以下内容:

4
3
2
1 // We hit base case on next rek() call, so no print out of there
1 // Here the for loop comes in
2 2
3 3 3  
4 4 4 4

顺便说一下,请注意在代码中放置大括号有点违反直觉。


以上是有人可以解释这个输出吗?(C++)的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>