1. 程式人生 > >用遞迴實現1到100的和,1到10的階乘

用遞迴實現1到100的和,1到10的階乘

遞迴:方法定義中呼叫方法本身的現象
注意實現:
1.遞迴一定要有出口,否則就是死遞迴 StackOverflowError
2.遞迴的次數不能過多,否則也會出現死遞迴
特殊事項:構造方法不可以遞迴定義

	舉例:
		從前有座山,山上有座廟,廟裡有個老和尚,老和尚再給小和尚講故事,故事是:
		從前有座山,山上有座廟,廟裡有個老和尚,老和尚再給小和尚講故事,故事是:
		從前有座山,山上有座廟,廟裡有個老和尚,老和尚再給小和尚講故事,故事是:

程式碼塊

遞迴1-100的和

public class DiguiHe{
	
	public static void main(String[] args) {
		System.out.println("遞迴1-100和:"+dghe(5));
		System.out.println("遞迴1-100和:"+fdghe(5));
	}
	
	/**
	 * 遞迴1-100和
	 * @Author Mr.Peng
	 */
	private static int dghe(int i) {
		/**
		 * 這裡以5為例:
		 * 5+dghe(4)=5+4+dghe(3)=5+4+3+dghe(2)+5+4+3+2+dghe(1)=5+4+3+2+1
		 * 當dghe(1)走 return 1;程式結束了
		 */
		if(i == 1){
			return 1;
		}else{
			return i+dghe(i-1);
		}
	}

	/**
	 * 非遞迴1-100和
	 * @Author Mr.Peng
	 */
	private static int fdghe(int i) {
		int sum = 0;
		int j = 1;
		while(j<=i){
			sum+=j;
			j++;
		}
		return sum;
	}
}

遞迴10的階乘

public class DiguiChen{
	
	public static void main(String[] args) {
		System.out.println("遞迴階乘:"+dgjc(10));
		System.out.println("非遞迴階乘:"+fdgjc(10));
	}
	/**
	 * 遞迴階乘
	 * @Author Mr.Peng
	 */
	private static int dgjc(int i) {
		//這裡舉例5的階乘,10的階乘同理:
		//5*dgjc(4)=5*4*dgjc(3)=5*4*3*dgjc(2)=5*4*3*2*dgjc(1)=5*4*3*2*1=120
		if(i == 1){
			return 1;
		}else{
			return i*dgjc(i-1);
		}
	}
	/**
	 * 非遞迴階乘
	 * @Author Mr.Peng
	 */
	private static int fdgjc(int i) {
		// TODO Auto-generated method stub
		int sum = 1;
		while(i>0){
			sum*=i;
			i--;
		}
		return sum;
	}
}