将迭代函数转换为递归函数

时间:2015-02-10 07:10:47

标签: c++ recursion iteration

我正与同事讨论如何将以下迭代函数转换为严格递归函数。我们知道所有迭代函数都可以转换为递归函数;但是,我的同事记得这个特定的实现只使用了三个参数。我们无法重新解决这个问题。我们记错了吗?或者我们错过了一些简单的东西?

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;
  }
}

除了这里的问题之外,用连字符填充右侧。

1 个答案:

答案 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分钟编辑了你的问题,但我可以看到你自己选择了一条像我的回答的路径。