public class MethodDemo08
{
public static void main(String[] args)
{
int sum = 0;
sum = fun(100);
System.out.println("计算结果:" + sum);
}
public static int fun(int temp)
{
if(temp==1)
{
return 1;
}else
{
return temp + fun(temp-1);
}
}
}
这是老师讲的一个案例,我不太明白,递归是调用自己的方法,但是100+99+...+1的时候,也就是当temp=1的时候,函数就返回了1,根本就不用执行else语句,整个函数的结果应该是1,为什么是5050呢?
{
public static void main(String[] args)
{
int sum = 0;
sum = fun(100);
System.out.println("计算结果:" + sum);
}
public static int fun(int temp)
{
if(temp==1)
{
return 1;
}else
{
return temp + fun(temp-1);
}
}
}
这是老师讲的一个案例,我不太明白,递归是调用自己的方法,但是100+99+...+1的时候,也就是当temp=1的时候,函数就返回了1,根本就不用执行else语句,整个函数的结果应该是1,为什么是5050呢?
sum = 100+fun(99);
sum = 100+99+fun(98);
....
sum = 100+99+....+2+fun(1);
sum = 100+99+....+ 2 + 1;
sum = 5050;
+1 这个就是整个递归的过程。。刚100时就进的下面那个,并不少那个return 1的程序段…
值,慢慢算就出来了撒
100+99+fun(98)
......
if(temp==1){
return 1;
}fun(1)==1这是相当于已知最终的结果是返回的100+fun(99) 后面的返回可以想成计算过程打个断点调试下嘛 值搞小点 比如3
这是是判断语句啊,如果temp的值是1,当然不执行else。但是你第一次带过来的值是100=。=
return 100+fun(99)(
fun(99)return 99 + fun(98)(
fun(98) return 98+fun(97)
)
)整个100+99+98++2都在else语句的return 中的“fun(100)”中算出的,最后再+1
sum = 100 + fun(99);
fun(99) = 99 + fun(98)
......
fun(2) = 2 + fun(1);
fun(1) = 1;
看清楚这个过程没有.