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 }