簡體   English   中英

轉換遞歸函數並使之迭代

[英]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結果(float,float)在這里並不重要,它只是一個返回隨機浮點數的函數。 這里的重點是刪除遞歸

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM