public class a1 {
private static int unit = 0;
private static int sum = 0;
public static void main(String[] foo) {
unit = 10;
System.out.println(tailRecur(unit));
System.out.println(tailRecur2(10));
}
public static int tailRecur(int result) {
int sum = result + unit - 1;
unit = unit - 1;
if (unit == 0) {
return sum;
}
return tailRecur(sum);
}
public static int tailRecur2(int unit) {
if (unit == 0) return sum;
sum = sum + unit;
return tailRecur2(unit - 1);
}
}
我写了一个简单的方法来实现1 + ... + 10。我不确定哪个更适合递归语法的含义。这些都给了我正确的答案。
答案 0 :(得分:3)
存储静态变量是不必要的,因此任何一种解决方案都不理想。
尝试这样思考
你想做什么?答案:1+...+N
。
输入是什么?答案:N
,总和的最高数字。
您可以在递归的每个步骤中做些什么来帮助您通过该输入获得答案?答案:获取该数字并将其添加到所有N - 1
解决方案的结果中。
什么时候应该停止递归并开始累积求和结果(你的基本情况是什么)?答案:当数字达到1(通常是可能的最小输入),或者甚至小于它时,以防止负数输入引起StackOverflow错误。
public static int sumUpTo(int x) { if (x <= 1) return x; return x + sumUpTo(x - 1); }