老师让算5的阶乘的值,我用的方法比较笨,FOR循环的算法.
老师给了个新算法,可是我有点蒙了,看不懂代码.我给大家把程序贴上.package zy;
public class jiayou{
public int t (int a){
if(a==1){return 1;}
return a*t(a-1);
}
public static void main(String[]args){
jiayou a = new jiayou();
int c = a.t(5);
System.out.println(c);
}
}老师说这叫方法调自己,我看不懂 return a*t(a-1) 在方法t里是如何运行的.
各位大侠麻烦给解释解释~

解决方案 »

  1.   

    这个很简单哦,C语言中就有的递归调用哦!就是函数自己调用自己本身哦!return a*t(a-1):t(a-1)有被调用,return (a-1)*t(a-2);,反复地递归,就能算阶乘了哦!
      

  2.   

    看注释:
    public int t (int a){
            if(a==1){
               return 1;//当a=1的时候,返回1,也就是1的阶乘是1;其实还是漏了1的阶乘,0的阶乘也是1
            }
            return a*t(a-1);//如果a是大于1的,比如2,那么返回2*t(1),也就是2*1!
                            //这个算法是根据阶乘的定义来的 
        }
      

  3.   

    给你个例子long fabonacci(int i){
        if(i==0) {
             return 0;
        }
        return fabonacci(i-1)+fabonacci(i);
    }递归调用怎么说呢,不知道你学过数学上的归纳法没有,和那有点像,如果你弄懂那了,这自然也不在话下了
      

  4.   

    这个代码号熟悉啊   你是不是万和java16?
    我也是的  呵呵 
    那个递归:
    1.自己调用自己   2.问题想着简化的方向
    比如   计算5!  
    5!就等于5*(5-1)!也等于5*4!也等于5*t(4);最后的t(4),不就又调用了t()函数了嘛?
    那么其中的t(4)也就等于4*(4-1)!也等于4*3!也等于4*t(3);
    后面依次类推;知道t(1)的时候,再把return 1的数值在一层一层返回上去,直到t(5);在return a*t(a-1)的时候,t(a-1)不就是又调用了t()函数了嘛,这个就是递归.
      

  5.   

    给你个例子 long fabonacci(int i){ 
        if(i==0) { 
            return 0; 
        } 
        return fabonacci(i-1)+fabonacci(i); 
    } 递归调用怎么说呢,不知道你学过数学上的归纳法没有,和那有点像,如果你弄懂那了,这自然也不在话下了
    转不出来了。
      

  6.   

    这是递归最简单的应用,你把t(a-1)代入t(a)就行啦