2016-03-22 22 views
0

再帰的にpayDay(日)を呼び出して、1日目からの累積量を返します。1日目から毎日1ペニーが2倍になった場合に入力された累積量を返します。当日は価値があるが、私はこれまで、すべての前の日を追加する方法を見つけ出すことはできません:あなたは日nにペニーの量を見つけるために、再帰を使用している累積再帰

public static double payDay(int day) { 
    if (day == 1) { 
     return 0.01; 
    } else { 
     return 2 * payDay(--day); 
    } 
} 
+0

0.01

日これは、単純な乗算で解けるようです。 – TheNorthWes

+2

再帰、@AdmiralAdamaを使用して問題を解決する必要があると仮定します。 – DavidS

+0

なぜ 'return 0.01 * 2(day - 1)'だけではないのですか? – Michael

答えて

2

あなたの方法。再帰的にあなたが一日nに支払われているものを計算し、再帰部分として日n-1を追加するための式を使用することができます合計(すべての日の合計)を見つけるには:この日nと再帰のため2^(n-1)

は、式を使用します:

package test; 

public class Main { 
    public static double payDay(int day) { 
     if (day == 1) { 
      return 1; 
     } 

     return Math.pow(2, day - 1) + payDay(day - 1); 
    } 

    public static void main(String[] a) { 
     for (int i = 1; i < 10; i++) { 
      System.out.println("Day " + i + " " + payDay(i) + " pennies"); 
     } 
    } 
} 
+0

私は分かりやすくするために2^n - 1(例えば、2 ^(n-1))を括弧でくくっています。しかし、良い答えのために+1: –

+0

@TomRees - 撮影、ポイントありがとう! – mikeb

0

私は再帰をまったく使用する必要はないと思います。私が集めたものから、有限の幾何学的系列を合計しようとしています。

double payDay(int day) { 
    return 0.01 * (Math.pow(2.0, day) - 1.0); 
} 

日= 1つの戻り= 2つの戻り0.01 + 0.02

日= 3つの戻り0.01 + 0.02 + 0.04

+0

これはたぶん宿題なので再帰がポイントだと思います。 – mikeb

+0

あなたはおそらく正しいですが、それは私が推測する価値のある代替品です。 – bm1729