2017-02-17 40 views
-1

我一直在練習遞歸,試圖讓它更舒適,但是這個問題一直困擾着我。
我應該寫一個遞歸程序,將數組中的每個元素加起來三元組。起初,它似乎很簡單。三元組遞歸遞歸的每個元素

public static void triple (int[] a, int index) { 
    if (index < a.length()) { 
     a[index]*=3; 
     triple(a, index + 1); 
    } 
} 

但是當我再次看到問題時,我意識到我犯了一個錯誤。該方法的參數只能是一個沒有索引的整數數組。

我該如何解決這個問題?

+1

我認爲他們打算讓你編寫一個輔助方法並從單參數方法中調用它。 –

+1

如果你要練習遞歸,你應該選擇本質遞歸的問題。不適合使用遞歸的原因。這就像是買一把新的鏈鋸,並決定用它來雕刻火雞。遞歸可能非常強大,但在許多情況下它並不合適。 –

+0

Miam turkey;)無論如何,你總是可以返回索引而不是將其作爲參數傳遞。 – JFPicard

回答

1

這個問題不是遞歸解決的最佳問題。

保持原樣(僅將length()替換爲length)。
超載它的另一種方法:

public static void triple(int[] a) { 
    triple(a, 0); 
} 

然後在你的代碼,你可以去:

int[] t = {1, 2, 3}; 
triple(t); 
0

的問題是:這個問題不能真正使用遞歸解決 - 假設你只有可以傳遞數組本身。

問題是:你必須知道哪些指標增加了三倍;而不是。

換句話說:你不知何故必須作弊;你將不得不在某處保留一些助手變量,告訴你最近處理過的索引;或類似的東西。

但如上所述;這意味着要實施一個解決方案......只能通過「按摩」需求來實現。

含義:當你真的限制自己到一個方法,只需要數組作爲參數,那麼你不能解決這個難題!