Java面向对象-递归
递归,就是程序调用自身,我们讲的是方法递归调用,也就是在方法里自己调用自己;
我们给出一个案例,求阶乘 1*2*3*...*(n-1)*n
我们用非递归和递归方式分别实现下,大家可以比较下;
我们先用非递归方式 大家肯定会想到用循环实现,
上代码:
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
上代码:
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));
}
}