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呢?

解决方案 »

  1.   

    sum = fun(100);
    sum = 100+fun(99);
    sum = 100+99+fun(98);
    ....
    sum = 100+99+....+2+fun(1);
    sum = 100+99+....+ 2 + 1;
    sum = 5050;
      

  2.   

    为什么想不明白呢  ,这里每次调用fun(temp)时都会return一个int值,只是这个方法的结点为1,
      

  3.   


    +1  这个就是整个递归的过程。。刚100时就进的下面那个,并不少那个return 1的程序段…
      

  4.   

    这里mian里面这个fun(100)return的是temp + fun(temp-1);
    值,慢慢算就出来了撒
      

  5.   

    100+fun(99)
    100+99+fun(98)
    ......
    if(temp==1){
      return 1;
    }fun(1)==1这是相当于已知最终的结果是返回的100+fun(99) 后面的返回可以想成计算过程打个断点调试下嘛 值搞小点 比如3
      

  6.   

    if(temp==1)
    这是是判断语句啊,如果temp的值是1,当然不执行else。但是你第一次带过来的值是100=。=
      

  7.   

    递归函数,将其下一条语句的地址压栈,保存现场,当遇到递归结束语句程序运行完毕,清理栈,接着下一条语句顺序执行,栈的特点是先进后出,遇到return之后,会执行最后放进栈的语句。语言描述就是想要求fun(100) 就要知道 fun(99) 为多少 ...... 直到最后想知道fun(2)的值必须知道fun(1) = 1然后逆着算出fun(100)是多少。
      

  8.   

    fun(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
      

  9.   

    2楼正解,解释的相当清楚!楼主说的return 1也是正确的,只是把过程省略了,刚开始看递归的时候我也和你的想法一样呀
      

  10.   

    你手动实现以下知道原理了,
    sum = 100 + fun(99);
    fun(99) = 99 + fun(98)
    ......
    fun(2) = 2 + fun(1);
    fun(1) = 1;
    看清楚这个过程没有.