黑马程序员技术交流社区

标题: 递归没学,,,谁能给分析一下这些代码啊???谢谢了 [打印本页]

作者: 韩凯5354    时间: 2015-9-18 14:50
标题: 递归没学,,,谁能给分析一下这些代码啊???谢谢了
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);
        }
}



作者: 芝麻糊    时间: 2015-9-18 17:47
递归这个东西,,老毕视频有讲过,哈哈  
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
作者: 韩凯5354    时间: 2015-9-19 21:07
芝麻糊 发表于 2015-9-18 17:47
递归这个东西,,老毕视频有讲过,哈哈  
getN(5) 的执行过程
getN(5)

恩恩  今天我们刚讲了一遍,,弄懂了
作者: 张寰宇    时间: 2015-9-19 21:12
谢谢分享 学习了
作者: 朦胧色彩    时间: 2015-9-19 23:21
所谓递归,就是自己调用自己
拿你这代码说,先说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!
作者: Marx_D    时间: 2015-9-19 23:35
递归的两个原则:要有出口;递归次数不能太多,不然就如死递归。屡试不爽。其中,if(n == 1)就是出口,return n*getN(n-1)就是递归自己。
作者: sniper170fly    时间: 2015-9-20 09:28
其实自己画图看一下程序的执行过程就清楚了,不过数值还是写小一点,要不然执行太长自己都糊涂了
作者: cemabenteng    时间: 2015-9-20 13:46
记住出口和次数就够了
作者: 韩凯5354    时间: 2015-9-20 21:14
张寰宇 发表于 2015-9-19 21:12
谢谢分享 学习了

嘿嘿   学会了????   好腻害
作者: 韩凯5354    时间: 2015-9-20 21:17
朦胧色彩 发表于 2015-9-19 23:21
所谓递归,就是自己调用自己
拿你这代码说,先说5的阶乘是:5*4*3*2*1;
那么在用递归之前,先想想递归的出 ...

恩   明白了方法调用自己就懂了   谢谢
作者: 韩凯5354    时间: 2015-9-20 21:19
Marx_D 发表于 2015-9-19 23:35
递归的两个原则:要有出口;递归次数不能太多,不然就如死递归。屡试不爽。其中,if(n == 1)就是出口,retu ...

谢谢大牛....学会了
作者: qq491786119    时间: 2015-9-20 21:31
学习了。
作者: 韩凯5354    时间: 2015-9-20 21:51
sniper170fly 发表于 2015-9-20 09:28
其实自己画图看一下程序的执行过程就清楚了,不过数值还是写小一点,要不然执行太长自己都糊涂了 ...

昨天刚学了 ,,,,挺绕的一个知识点
作者: 刘凯1213    时间: 2015-9-20 21:54
就是在不符合直接 最终return条件之间,一直返回每次减少一个值然后调用自己方法,直到返回1 然后再一次一次的计算回去
作者: 残影    时间: 2015-9-20 22:14
方法调用方法本身,直到有一个结果,然后层层往回返。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2