Java面向对象-递归

Java面向对象-递归


递归,就是程序调用自身,我们讲的是方法递归调用,也就是在方法里自己调用自己;


我们给出一个案例,求阶乘  1*2*3*...*(n-1)*n 


我们用非递归和递归方式分别实现下,大家可以比较下;


我们先用非递归方式 大家肯定会想到用循环实现,


上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package  com.java1234.chap03.sec03;
 
public  class  Demo03 {
 
     /**
      * 非递归
      * @param n
      * @return
      */
     static  long  notDiGui( int  n){
         long  result= 1 ;
         for ( int  i= 1 ;i<=n;i++){
             result=result*i;
         }
         return  result;
     }
     
     
     
     public  static  void  main(String[] args) {
         System.out.println(Demo03.notDiGui( 5 ));
     }
}



递归的话 我们首先要找到规律 还有必须有一个出口;


我们来先说说规律 比如求5的阶乘


我们会发现规律 

n=5   F(n)=F(n-1)*5  即F(5)=F(4)*5

n=4   F(n)=F(n-1)*4  即F(4)=F(3)*4

n=3   F(n)=F(n-1)*3  即F(3)=F(2)*3

n=2   F(n)=F(n-1)*2  即F(2)=F(1)*2

n=1   1


上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package  com.java1234.chap03.sec03;
 
public  class  Demo03 {
 
     /**
      * 递归方式
      * @param n
      * @return
      */
     static  long  diGui( int  n){
         if (n== 1 ){
             return  1 ;
         }
         return  diGui(n- 1 )*n;
     }
     
     
     public  static  void  main(String[] args) {
         System.out.println(Demo03.diGui( 5 ));
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值