java递归

1.通过递归计算5的阶乘

TestDiGui.java

//通过递归计算5的阶乘
public class TestDiGui {
	public static void main(String[] args) {
		System.out.println(m(5));	//结果为120
	}
	public static int m(int n) {
		if(n == 1) return 1;
		else return n*m(n-1);		
	}
}

方法调用图:

 
java递归 

2.通过递归方法计算fibnacci数列

TestFib.java

//通过递归计算斐波那契数列
//fibnacci f1=1,f2=1,f3=2,f4=3,f5=5,...,fn=f(n-1)+f(n-2);(n>2)
public class TestFib {
	public static void main(String[] args) {
		System.out.println(f(5));	//结果为5
	}	
	public static long f(int n) {
		if(n == 1 || n == 2){
			return 1;
		} else {
			return f(n-1)+f(n-2);	
		}	
		
	}
}

 递归方法调用图:


java递归
 

 3.通过非递归计算斐波那契数列

Fib.java

//通过非递归计算斐波那契数列
//fibnacci f1=1,f2=1,f3=2,f4=3,f5=5,...,fn=f(n-1)+f(n-2);(n>2)
public class Fib {
	public static void main(String[] args) {
		System.out.println(f(5));//结果5	
	}	
	
	public static long f(int n) {
		if(n == 1 || n ==2) {
			return 1;
		}
		long f1 = 1L;
		long f2 = 1L;
		long f = 0;
		
		for(int i=0; i < (n-2); i++) {
			f = f1 + f2;
			f1 = f2;
			f2 = f;
		}
		
		return f;
		
	}
}