我正与同事讨论如何将以下迭代函数转换为严格递归函数。我们知道所有迭代函数都可以转换为递归函数;但是,我的同事记得这个特定的实现只使用了三个参数。我们无法重新解决这个问题。我们记错了吗?或者我们错过了一些简单的东西?
void iterative_function (char a, char b, int width) {
int i = width;
while (i > 0) {
cout << string(i, a) << string(width-i, b) << endl;
i -= 2;
}
i = width % 2;
while (i <= width) {
cout << string(i, a) << string(width-i, b) << endl;
i += 2;
}
}
在调用iterative_function('X', '-', 5)
时,输出看起来如下所示。
XXXXX
XXX--
X----
XXX--
XXXXX
编辑:以下是递归版本的小骨架:
void recursive_function (char a, char b, int width) {
if (width > -1) {
cout << string(width, a) << endl;
recursive(a, b, width - 2);
cout << string(width, a) << endl;
}
}
除了这里的问题之外,用连字符填充右侧。
答案 0 :(得分:1)
以下是递归函数,我只是在here中可以看到的函数中添加了另一个len
,其输出与代码here的输出完全相同。
#include <iostream>
using namespace std;
void i_f(char a, char b, int width,int len) {
if(len <0 || width < 0)
return;
cout <<string(width, a) << string(len, b) << endl;
i_f(a,b,width-2,len+2);
cout <<string(width, a) << string(len, b) << endl;
}
int main() {
i_f('X', '-', 5,0);
return 0;
}
你的代码输出:
XXXXX
XXX--
X----
X----
XXX--
XXXXX
我的代码输出:
XXXXX
XXX--
X----
X----
XXX--
XXXXX
P.S 在我发布我的回答之后,我看到了你的编辑,虽然你在回答前10分钟编辑了你的问题,但我可以看到你自己选择了一条像我的回答的路径。