public class Monkey {
static long fn(long n){
if(n==10)
return 1;
else
return 2*fn(n)+2;
}
public static void main(String args[]) {
long sum;
sum=fn(1);
System.out.print("原来有桃子"+sum+"个桃子");
}
}
编译不报错,但是执行时疯狂报错。
错误在 return 2*fn(n)+2;这条语句这
你的main方法传入fn是1,
if(n==10)
return 1;
else
return 2*fn(n)+2; //会执行这句 然而n=1,在调用fn()并传入1,死循环
你这里递归,n都没发生改变,递归根本不能结束,把n+1给漏了吧=.=
你的main方法传入了sum = fn(1),代码正常执行,当 1 == 10为false的时候代码执行到else,return 2 * fn(n) + 2; 在这段代码中执行到fn(n)的时候陷入了死循环所以最后会报一个java.lang.StackOverflowError的错误为止。
return (fn(n + 1) + 1) * 2;
代码已改,由于缺少变量n的递增,当sum=fn(1);执行后 else
return 2*fn(n)+2;将一直执行。无法跳出循环,形成死循环报错。应在else后加入n=n+1。问题就解决了。
public class Monkey {
static long fn(long n){
if(n==10)
return 1;
else{
n=n+1;
return 2*fn(n)+2;}
}
public static void main(String args[]) {
long sum;
sum=fn(1);
System.out.print("原来有桃子"+sum+"个桃子");
}
}