我想以递归方式调用payDay(day),这将返回从第1天到第1天累计的累计金额,如果从第1天开始每天1便士加倍。我已经获得了返回传入日期的金额的方法值得,但我无法弄清楚如何将所有前几天加起来:
public static double payDay(int day) {
if (day == 1) {
return 0.01;
} else {
return 2 * payDay(--day);
}
}
答案 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;
}