转换递归函数并使其迭代
Transform a recursive function and make it iterative
基本上我有一个递归函数,我不想再递归了。
但是我想不通现有代码本身的逻辑。
这里是
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) 在这里并不重要,它只是一个 returns 随机浮点数的函数。这里的重点是删除递归
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。
基本上我有一个递归函数,我不想再递归了。 但是我想不通现有代码本身的逻辑。
这里是
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) 在这里并不重要,它只是一个 returns 随机浮点数的函数。这里的重点是删除递归
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。