【问题标题】:Transform a recursive function and make it iterative转换递归函数并使其迭代
【发布时间】:2016-02-20 10:24:39
【问题描述】:

基本上我有一个递归函数,我不想再递归了。 但是我无法弄清楚现有代码本身的逻辑。

这里是

float myRecursiveFunction(x, y, depth, divisor) {
    if(depth == 0)
        return result(x/divisor, y/divisor);

    float displace = myRecursiveFunction(x, y, depth-1, divisor/2);

    return result(displace+(x/divisor), displace+(y/divisor));

}

这就是它的名称:

float myresult = myRecursiveFunction(x, y, 5, 2);

它总是用 5 和 2 调用。

你们中有人知道如何进行吗?或者如果它足够短,一个没有递归的代码?

float result(float, float) 在这里并不重要,它只是一个返回随机浮点数的函数。这里的重点是去掉递归

【问题讨论】:

  • 函数的核心是另一个函数result,这里不定义。
  • 这不是问题,result() 只是返回一个随机浮点数。
  • 所以你的函数返回一个随机浮点数。无需迭代。
  • 这样做的目的是让递归函数变得可迭代,不管 result() 做什么。
  • xydepthdivisor有哪些类型? depth 是整数类型吗? divisor 是浮点类型吗? xy 也是 float 吗?

标签: c++ c recursion iteration


【解决方案1】:
divisor *= (1/2.0) ** depth
r = result(x/divisor, y/divisor)
for i in range(depth -1):
  divisor *= 2
  r = result(r + x/divisor, r+y/divisor)

return r

小心,如果你这样做,你可能会失去精确度。

希望我没有在某处忘记一些 -1/+1。

【讨论】:

  • ** 不是 C 或 C++ 中的运算符。
  • 对不起,它在 python 中的思考速度更快,但转换为 C++ 应该是微不足道的。
  • 就是这样。谢谢。
猜你喜欢
  • 1970-01-01
  • 2020-08-08
  • 2015-05-30
  • 2014-03-01
相关资源
最近更新 更多