A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 .____盒子 于 2014-6-25 21:39 编辑

public static void main(String[] args) {
        int jc = jc(10);
        System.out.println(jc);
    }   
    public static int jc(int num){
        if(num==1){
            return 1;
        }else{
            return num*jc(num-1);
        }


jc的阶乘方法
jc为什么乘( num - 1  ); 啊  ?  ?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

8 个回复

倒序浏览
你不是要算阶乘吗,8*7*6*5.....那当然要乘num-1了
回复 使用道具 举报
jc(num-1)//将每进一次的数的第一个值保留一直与后一个数相乘
是继续调用本方法的递归啊
哪有楼主所说的 jc*(num-1)的问题
回复 使用道具 举报
- -你带入数字进去就明了了,假设num是5 ,那第一次该返回 5*(5-1)  然而方法自身调用自身,所以(5-1)又作为参数传入到JC(num)  第二步又返回   4*(4-1)……依此程序最会执行结束就变成 5*4*3*2*1
回复 使用道具 举报
递归思想  : 把一个大问题分解成多个小问题 , 再把小问题 分解成多个小问题 ,这倒这个小问题截止到揭发了
回复 使用道具 举报
根据地柜的条件 , 判断Num是哦否为 1  , 若为一则返回 1 , 若不是 , 则 else返回当前得到的数乘num-1的阶乘,打印出num-1的阶乘 , 调用该方法就可以得出结果
回复 使用道具 举报
递归:方法中调用方法本身就叫递归;
思想:把大问题分解成小问题;
而你的问题正是问到递归的这两个思想,
1)你已经确定是递归程序,所以必定存在调用本身方法的地方,所以必调jc()方法
2)把大问题分解成小问题:你是想算10的阶乘,而10!=10*9!,这就是分解,而9!正好需要用到递归的方法就相当于jc(9)=jc(10-1),而9!=9*8!....依次类推就会推算出1!和0!而他们正为实数1所以整个递归可以继续,所以推算出num!=num*(num-1)!

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
  学习学习!
回复 使用道具 举报
不是jc乘以num-1,应该是调用jc函数,传num-1参数进行运算实现递归调用。
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马