2012-04-19 57 views
1

下面引號是我的實際任務,下面是我當前的代碼。有人能指引我走向正確的方向嗎?請再次做家庭作業。遞歸乘以Evens?

編寫一個稱爲multiplyEvens的遞歸方法,該方法返回前n個產品的連結,即使是整數。例如,multiplyEvens(1)返回2,multiplyEvens(4)返回384 (因爲2 * 4 * 6 * 8 = 384)。如果傳遞了一個值拋出IllegalArgumentException小於1

private static int multiplyEvens(int n) 
    { 
     if(n%2 == 0) 
     {   
      System.out.println(n*n); 
      return multiplyEvens(n*n); 
         // I'm lost 
     } 
     System.out.println(); 
     return n; 
    } 
+0

我在遞歸方面非常糟糕。我也會爲做作業做這件事:p – 2012-04-19 00:49:27

+1

切碎機:讓OP解決n-1的問題,然後從那裏拿走它。 – 2012-04-19 01:44:31

回答

0

在這裏你去:

public static void main(String[] args) { 
    System.out.println(multiplyEvens(4)); 
} 

private static int multiplyEvens(int n) { 
    if(n < 1) throw new IllegalArgumentException("Value less than 1 not supported"); 
    else if(n == 1) return 2; 
    else return multiplyEvens(n-1) * (n*2); 
} 

這裏遞歸算法的基礎知識。你必須假設你有n-1的計算結果。然後你返回調整爲n的n-1的結果。 (也就是說,你乘以第n個偶數,n * 2)。遞歸方法調用做剩下的事情,它依次假定它已經計算出n-2的值,等等......直到n == 0,結果爲1

+2

郵寄沒有直接回答(即代碼)的人不應該爲家庭作業-yoda語言 - – LeleDumbo 2012-04-19 06:45:58

+0

對不起,沒有注意作業部分。我的眼睛被吸引到代碼...我會下一次。好點子。 – mprivat 2012-04-19 13:54:51

5

嘗試遞歸在N-1而不是N * N,看看你能弄清楚的multiplyEvens(n)價值如何與multiplyEvens(n-1)。也許這會讓你從正確的方向開始。

3

任何可以遞歸完成的事情都可以迭代完成。可以這樣想:當你寫一個for循環時,在你確定你正在工作的任何值的奇偶(偶/奇)值之前,你需要有一個額外的值,直到n。

因爲這是家庭作業,這裏的廣闊行程:

  • 你遞歸的方法可能需要兩個參數,而不是一個。
  • 您應該將值相乘,直到某個值爲i <=n

你大部分都在那裏。

5

在紙上走過。

開始n = 1的

1%2 = 1 so you don't do into your loop, and return value = 1 (wrong) 

嘗試N = 2

2%2 = 0, so you go into your loop and call multiplyEvens(2*2) 
4%2 = 0, so you go into your loop and call multiplyEvens(4*4) 
16%2 = 0 ... 

現在,你應該開始得到至少一個問題的線索,你的方法...

1

你應該向後做。即在每次遞歸調用時,返回(2 * n)*遞歸調用,減少n。基本情況是當n = 1時,函數只是返回2而不將它與另一個遞歸調用相乘(以滿足您需要爲n < 1拋出的IllegalArgumentException)。

0

乘以n等於
2^n * n!
所有你需要做的就是谷歌 階乘遞歸的Java

+0

不,乘以1到10的所有偶數值都不會使我接近10!它接近3,840。 – Makoto 2012-04-19 01:21:38

+0

真:你有錯誤的等式。將前10個平均值乘以2到20,甚至在1到10之間都不是值。rickz是正確的。 – 2012-04-19 01:30:19

+0

@Jason,謝謝。 – rickz 2012-04-19 01:31:51