返回列表 發帖

遞迴演算法

定義:演算法(函式)中有呼叫自己(Self Calling)的敘述

目的:重複執行一段程式
        (可以用迴圈也可以用遞迴來處理,因此迴圈必可改寫成遞迴,反之亦然)

特性:
    1.程式碼簡潔
    2.執行效率較迴圈慢
    3.將控制權轉移到呼叫的函式
    4.呼叫函式後要將變數值及狀態由Stack中Pop出來
    (維基百科:堆疊)

遞迴的種類:


遞迴的要素:
    1.遞迴關係式:找出問題共通的關係,以便反複呼叫自己
    2.終止條件:遞迴結束的條件

白話版的遞迴例子:

從前有座山,山裡有座廟,廟裡有個老和尚講故事,講的什麼呢?從前有座山,山裡有座廟,廟裡有個老和尚講故事,講的什麼呢?從前有座山,山裡有座廟,廟裡有個老和尚講故事,講的什麼呢?從前有座山,山裡有座廟...

  1. package a;

  2. public class Ch03 {
  3.     static int total(int n)
  4.     {
  5.             if(n==1)
  6.                     return 1;
  7.             else
  8.                     return n+total(n-1);
  9.     }
  10.        
  11.        
  12.        
  13.        
  14.         public static void main(String[] args) {
  15.                 // TODO 自動產生的方法 Stub
  16.                 System.out.println("1+2+....+5="+total(5));
  17.                 System.out.println("1+2+....+101="+total(101));
  18.                 System.out.println("1+2+....+257="+total(257));
  19.        
  20.        
  21.         }

  22. }
複製代碼

TOP

  1. import java.util.Scanner;


  2. public class Ch01 {
  3.         static int total(int n){
  4.                 if(n == 1)
  5.                         return 1;
  6.                 else
  7.                         return n + total(n - 1);
  8.         }
  9.        

  10.         public static void main(String[] args) {
  11.                 // TODO 自動產生的方法 Stub
  12.                 System.out.println("1+2+......+5="  + total(5));
  13.                 System.out.println("1+2+......+101="  + total(101));
  14.                 System.out.println("1+2+......+257="  + total(257));
  15.         }
  16. }
複製代碼

TOP

返回列表