java猴子吃桃,编译不报错,执行报错

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+"个桃子");
    }
    }