累积递归

时间:2016-03-22 17:00:04

标签: java recursion

我想以递归方式调用payDay(day),这将返回从第1天到第1天累计的累计金额,如果从第1天开始每天1便士加倍。我已经获得了返回传入日期的金额的方法值得,但我无法弄清楚如何将所有前几天加起来:

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

3 个答案:

答案 0 :(得分:2)

您使用递归方式查找n天的便士数量。要递归查找总数(所有天数之和),您可以使用公式计算当天n支付的内容,并将日n-1添加为递归部分:

使用公式2^(n-1)获取第n天并递归:

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");
        }
    }
}

答案 1 :(得分:0)

我认为你根本不需要使用递归。从我收集到的东西,你试图总结一个有限的几何系列。

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

day = 1返回0.01

day = 2返回0.01 + 0.02

day = 3返回0.01 + 0.02 + 0.04

答案 2 :(得分:-1)

public static double payday(double day) { 
  if (day == 1) {
     return 0.01;
  } else if (day > 1 && day <= 31) {
     return 2*payday(- - day);
  }
  return  day;
}