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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package com.heima.homework;

public class Test4 {

        /**
         * 4,求5的阶乘(n的阶乘 = n*(n-1)*(n-2)*...*1)
         * 4,求5的阶乘(5的阶乘 = 5*(5-1)*(5-2)*(5-3)*(5-4))
         */
        public static void main(String[] args) {
               
                System.out.println(getN(5));
        }
        public static int getN(int n) {
               
                if(n == 1) {
                        return 1;
                }
                return n*getN(n-1);
        }
}


14 个回复

倒序浏览
递归这个东西,,老毕视频有讲过,哈哈  
getN(5) 的执行过程
getN(5)
5 * getN(4)
5 * 4 * getN(3)
5 * 4 * 3 * getN(2)
5 * 4 * 3 * 2 * getN(1)
5 * 4 * 3 * 2 * 1
回复 使用道具 举报
芝麻糊 发表于 2015-9-18 17:47
递归这个东西,,老毕视频有讲过,哈哈  
getN(5) 的执行过程
getN(5)

恩恩  今天我们刚讲了一遍,,弄懂了
回复 使用道具 举报
张寰宇 来自手机 中级黑马 2015-9-19 21:12:14
板凳
谢谢分享 学习了
回复 使用道具 举报
所谓递归,就是自己调用自己
拿你这代码说,先说5的阶乘是:5*4*3*2*1;
那么在用递归之前,先想想递归的出口,这里的出口是if(n == 1) { return 1;},为什么呢?
因为5*4*3*2*1,我们要从5往后找,找到1就算完成了
getN(5) ---> 先判断5是不是等于1,不等于所以找getN(5-1) ---> 判断4是不是等于1,不等于所以找getN(4-1)
---> 判断3是不是等于1,不等于所以找getN(3-1) ---> 判断2是不是等于1,不等于就找getN(2-1) , 此时2-1==1,
那么 return 1,就可以得到getN(1) == 1 , getN(2) = 2 * get(1) = 2 , getN(3) = 3 * get(2) = 6 , getN(4) = 4 * getN(3) = 24 , getN(5) = 5 * getN(4) = 120!
回复 使用道具 举报
递归的两个原则:要有出口;递归次数不能太多,不然就如死递归。屡试不爽。其中,if(n == 1)就是出口,return n*getN(n-1)就是递归自己。
回复 使用道具 举报
其实自己画图看一下程序的执行过程就清楚了,不过数值还是写小一点,要不然执行太长自己都糊涂了
回复 使用道具 举报
记住出口和次数就够了
回复 使用道具 举报

嘿嘿   学会了????   好腻害
回复 使用道具 举报
朦胧色彩 发表于 2015-9-19 23:21
所谓递归,就是自己调用自己
拿你这代码说,先说5的阶乘是:5*4*3*2*1;
那么在用递归之前,先想想递归的出 ...

恩   明白了方法调用自己就懂了   谢谢
回复 使用道具 举报
Marx_D 发表于 2015-9-19 23:35
递归的两个原则:要有出口;递归次数不能太多,不然就如死递归。屡试不爽。其中,if(n == 1)就是出口,retu ...

谢谢大牛....学会了
回复 使用道具 举报
学习了。
回复 使用道具 举报
sniper170fly 发表于 2015-9-20 09:28
其实自己画图看一下程序的执行过程就清楚了,不过数值还是写小一点,要不然执行太长自己都糊涂了 ...

昨天刚学了 ,,,,挺绕的一个知识点
回复 使用道具 举报
就是在不符合直接 最终return条件之间,一直返回每次减少一个值然后调用自己方法,直到返回1 然后再一次一次的计算回去
回复 使用道具 举报
方法调用方法本身,直到有一个结果,然后层层往回返。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马