将下列递归程序转化为非递归程序(C++)

void p(int w){if(w>0){cout<<w;p(w-1);p(w-1);}}
2025-02-22 13:23:10
推荐回答(1个)
回答1:

// 这是我能想到的最简单的实现方法了,如果非要输出的是数字形式的话要麻烦的多
// 记得头文件要加上
// 该递归函数输出结果规律如下:
// 当w = 1,输出1
// 当w = 2,输出2 (1) (1)
// 当w = 3,输出3 (211) (211
// 可以发现每次就是将w-1的结果复制一遍,然后在开头加上w,即w(w-1的输出)(w-1的输出)

void p(int w)
{
if (w < 0) return ;

string s = "1", si = "0";
for (int i = 2; i <= w; ++i)
{
s += s; // 将w-1的输出复制
si[0] ='0' + i;
s = si + s; // 将w放在已经复制好的上次结果的开头
}
cout << s;
}