Java面向对象-递归

Java面向对象-递归

 

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

 

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

 

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

 

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

 

上代码:

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

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

 

我们来先说说规律 比如求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 package com.java1234.chap03.sec03;
 2  
 3 public class Demo03 {
 4  
 5     /**
 6      * 递归方式
 7      * @param n
 8      * @return
 9      */
10     static long diGui(int n){
11         if(n==1){
12             return 1;
13         }
14         return diGui(n-1)*n;
15     }
16      
17      
18     public static void main(String[] args) {
19         System.out.println(Demo03.diGui(5));
20     }
21 }

 

posted on 2016-10-17 16:24  eaglezb  阅读(851)  评论(0编辑  收藏  举报

导航