2015-03-31 78 views
-4
public T get(int i) { 

    if(i == 0){ 
     T val = cur.getData(); 
     cur = head; 
     return val; 
    } 
    else{ 
     cur = cur.getNext(); 
     return get(i-1); 
    } 

} 

//我要遞歸解決這個問題,我不能使用迭代,這是使用迭代我在做這個遞歸還是會被認爲是迭代?

+1

如果(i == 0)**是遞歸的,則調用它自己的中斷條件**。 – 2015-03-31 21:11:56

+0

如果你知道遞歸是什麼,你就不必問這個問題。你似乎在問「什麼是假象?」。 – Raedwald 2015-03-31 22:06:43

回答

3

我是不是遞歸這樣做還是會這算不算重複?

你的函數調用本身:

public T get(int i) { 

    if(i == 0){ 
     T val = cur.getData(); 
     cur = head; 
     return val; 
    } 
    else{ 
     cur = cur.getNext(); 
     return get(i-1); // <============ Here 
    } 

} 

根據定義,這是遞歸,不重複。

迭代會是這個樣子:

public T get(int i) { 
    T val = cur.getData(); 
    while (i-- > 0) { 
     cur = cur.getNext(); 
     val = cur.getData(); 
    } 
    cur = head; 
    return val; 
} 

在那裏,我們只是循環中get,我們沒有它調用自身。這不是你的遞歸示例的完美翻譯,因爲它處理的事情有點不同,如果i是負面的開始,但它可能符合意圖(兩個版本可能會使用某種警衛來防止i負面開始)。