有人可以解释这个输出吗?(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
顺便说一下,请注意在代码中放置大括号有点违反直觉。