2016-11-10 106 views
2

我總是遇到問題,試圖轉換我創建的遞歸算法,返回2遞歸調用,直到滿足基本情況。將返回2遞歸的遞歸函數轉換爲迭代

很容易追蹤每次遞歸調用的做法,但將它們轉換爲迭代有點令人困惑。

例如此遞歸函數

BEGIN SEQ(n) 
    if (n == 1) 
    return 3; 

    else if (n == 2) 
    return 2; 

    else 
    return SEQ(n - 2) + SEQ(n - 1) 

這是相當直截了當的,當我嘗試橡膠鴨通過其產生的後續過程

SEQ(6)= SEQ(遞歸我的方式4)+ SEQ(5)

SEQ(5)= SEQ(3)+ SEQ(4)

SEQ(4)= SEQ(2)+ SEQ(3)

SEQ(3)= SEQ(1)+ SEQ(2)

SEQ(2)= 2

...

SEQ(3)= 3 + 2 = 5

SEQ(4)= 2 + 5 = 7

SEQ(5)= 5 + 7 = 12

SEQ(6)= 7 + 12 = 19

但是,我不能似乎想出一個迭代的方式返回遞歸是如何執行

+0

算法做不太適合這個例子。你是說在最後一行中有'return SEQ(n-2)+ SEQ(n-1)'? – Henry

+0

對不起,錯字錯誤。 –

+0

除了起始值之外,它的構建方式與斐波納契數列相同。你找到的任何迭代程序都很容易修改。 – Henry

回答

4

迭代在C#方法看起來是這樣的:

public static int SEQ(int n) 
{ 
    if (n == 1) 
    { 
     return 3; 
    } 

    if (n == 2) 
    { 
     return 2; 
    } 
    var first = 3; 
    var second = 2; 

    for (var i = 3; i <= n; i++) 
    { 
     second += first; 
     first = second - first; 
    } 


    return second; 
}