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)); } }