2015-05-27 33 views
-1

我正在處理這個問題,我不明白解決方案。這段代碼的「遞歸條件」是什麼(遞歸在Java中)

的問題的屏幕截圖位於http://i.stack.imgur.com/aUtRk.png和這裏引用:

假設參數n是非負的,什麼是遞歸 條件(它允許要調用的遞歸方法)方法的 mystery

public int mymestry(int n, int m) 
{ 
    if (n == 0) 
     return 0; 
    if (n == 1) 
     return m; 
    return m + mymestry(n - 1, m); 
} 

原本我以爲的解決方案應該是n > 0;但我被告知正確的解決方案是n >= 2

爲什麼n >= 2被認爲是正確的解決方案而不是n > 0

+5

有什麼問題? – Lrrr

+0

我在代碼中看不到這個條件 – MaxZoom

+1

@MaxZoom當'n'是一個或零時,我返回 – Lrrr

回答

1

僅當有多個元素需要處理時才需要遞歸。 如果有一個或零個元素,則返回。

0

mymestry功能似乎多nm,當然你可以從1而不是兩個開始,改變你的函數:

public int mymestry (int n, int m) 
{ 
    if(n==0) 
     return 0; 
    return m + mymestry(n-1, m); 
} 

但誰寫這段代碼的人,考慮m*1微不足道多個並返回它的值而不是計算它。

3

根據您所使用的術語:

的「遞歸條件」是一組在哪些情況下該函數將調用自身遞歸減少的問題域。當發生這種情況時,一個新的函數調用被添加到堆棧並且調用進行到「更深」

「停止條件」是函數將直接提供答案的情況集合(它將被反饋到任何調用函數)。發生這種情況時,先前添加到堆棧中的函數調用將會收到答案,並將答案反饋給它們的調用函數。換句話說,堆棧是「展開」或變得「更小」。

根據提供的代碼,如果n == 0n == 1,則不會發生遞歸。因此,n > 0不一定滿足條件。 n >= 2會導致函數被遞歸調用,所以它代表了「遞歸條件」