java programming - chapter 11 (in thai)

Upload: wongyos-keardsri

Post on 09-Mar-2016

16 views

Category:

Documents


0 download

DESCRIPTION

Java Programming - Chapter 11 (in Thai) by Wongyos Keardsri

TRANSCRIPT

  • 145

    2553 ( 7 2/2553) ()

    Computer Programming using Java Recursion - 11

    CHAPTER 11

    (Recursion)

    1. (Introduction to Recursion)

    1. 1) (Recursion)

    2) (Recursive Method) ( ) (Iteration) 4 while for 4

    3) (Recursive Programming) -

    2. 2 1) (Recursion Case)

    return fac(n-1), return fibo(n-1) + fibo(n-2)

    2) (Base Case) return 1, return n

    3. f() 0 n f(n) = (0+1+2+ +n) (Iteration: for) (Recursion)

    1 2 3 4 5 6 7

    public static int f(int n) { int s = 0; for(int i = n; i >= 0; i--) { s += i; } return s; }

    1 2 3 4 5 6 7

    public static int f(int n) { if(n

  • 146

    2553 ( 7 2/2553) ()

    Computer Programming using Java 11 - Recursion

    1 [] f() f(5) (10 )

    2 [] (6 ) 3 [] (6 )

    1 2 3 4 5 6 7

    public static int mul(int x, int y) { if (x >= 1) { return y + mul(x - 1, y); } else { return 0; } }

    mul(4, 3) mul(5, 7) mul(20, 10) Linear Recursion

    1 2 3 4 5 6 7 8

    public static int gcd(int m, int n) { if (m < n) return gcd(n, m); if (m % n == 0) { return n; } else { return gcd(n, m % n); } }

    gcd(28, 16) gcd(9, 14) gcd(75, 30)

    Tail Recursion

    1 2 3 4 5 6

    1 2 3 4 5 6

  • 147

    2553 ( 7 2/2553) ()

    Computer Programming using Java Recursion - 11

    4 [] expo() (15 ) (Binary Tree) expo(0), expo(1), expo(2) expo(3)

    5 [] (6 )

    1 2 3 4 5 6 7

    public static int expo(int n) { if (n = 1) { printX(1, x); } } public static void printX(int i, int x) { if (i

  • 148

    2553 ( 7 2/2553) ()

    Computer Programming using Java 11 - Recursion

    6 [] akm(m, n) m n (10 )

    n m

    0 1 2 3 4 0 1 2 3

    2. (Basic Recursion)

    1. Linear Recursion, Tail Recursion Binary Recursion

    2. (Series), (Functions) (Algorithms)

    3. 0 n ( n 0) 1)

    f(n) ==

    n

    0ii n = 0,1,2,3,

    2) 2 ( 2 ) (1)

    f(n) = 0 n = 0

    (2)

    f(n) ==

    1n

    0ii + n n = 1,2,3,

    f(n) = f(n - 1) + n n = 1,2,3,

    1

    2

    1 2 3 4 5 6 7 8 9

    public static int akm(int m, int n) { if (m == 0) { return n + 1; } else if (n == 0) { return akm(m - 1, 1); } else { return akm(m - 1, akm(m, n - 1)); }

    }

    Nested Recursion

    Recursion Iteration Wilhelm Ackermann

  • 149

    2553 ( 7 2/2553) ()

    Computer Programming using Java Recursion - 11

    3) 2 2 if-else 1 2

    7 [] f() n Math (10 )

    8 [] f() n Math (10 )

    1 2 3 4 5 6 7

    public static int f(int n) { if(n > 0) { return f(n - 1) + n; } else { return 0; } }

    n 0

    1 2 3 4 5 6 7

    public static int f(int n) { if(n

  • 150

    2553 ( 7 2/2553) ()

    Computer Programming using Java 11 - Recursion

    9 [] g() n Math (10 )

    10 [] fac() (Factorial) n fac(5) 5! 120 (10 )

    11 [] fibo() - (Fibonacci) fibo(n) = fibo(n - 1) + fibo(n - 2) n >= 2 fibo(0) = 0 fibo(1) = 1 (10 )

    =

    =

    +

    ==

    0 n 0

    1 n 12 ni

    11)n(g

    n

    2i

  • 151

    2553 ( 7 2/2553) ()

    Computer Programming using Java Recursion - 11

    12 [] fibo() - (Binary Tree) fibo(5) (5 )

    13 [] pow() ab a b ( ) (10 )

    14 [] f() n Math (10 )

    113n1

    2n11n1

    n1)n(f

    O++

    ++

    +=

    fibo(5)

    fibo(4) fibo(3)

    fibo(3) fibo(2) fibo(2) fibo(1)

    fibo(1) fibo(2)

    fibo(0)fibo(1)

    Math

    fibo(0)fibo(1)

    fibo(0) fibo(1)

  • 152

    2553 ( 7 2/2553) ()

    Computer Programming using Java 11 - Recursion

    15 [] (20 ) 1) g(n, m) = 1m - 2m + 3m - + (nm) n = 1,2,3, (10 ) 2) h(n) = n

    1...41

    31

    211 +++ n = 1,2,3, (10 )

    3. (Advanced Recursion)

    1. 2 ( Overload ) Mutual Recursion

    Math

    Math

  • 153

    2553 ( 7 2/2553) ()

    Computer Programming using Java Recursion - 11

    2. (String) (Arrays)

    3. Overload Overload

    16 [] search() -1 (10 )

    1 2 3 4 5 6 7 8 9 10 11 12

    public static int max(int a[]) { return max(a, 0, a[0]); } public static int max(int a[], int i, int m) { if (i < a.length) { if (a[i] > m) m = a[i]; return max(a, i + 1, m); } else { return m; } }

    max() Overload

    max() max() max() - (Indirect Recursion)

  • 154

    2553 ( 7 2/2553) ()

    Computer Programming using Java 11 - Recursion

    17 [] overHundred() 100 d (10 ) public class OverHundredNumber { public static void main(String[] args) { int d[] = { 99, 101, 13, 78, 200, 534, 47, 1234, 736 }; System.out.println(overHundred(d));

    }

    } //End of class 18 [] revStr() "Computer" "retupmoC" (10 )

  • 155

    2553 ( 7 2/2553) ()

    Computer Programming using Java Recursion - 11

    19 [] formulaAtoB() a b formulaAtoB(6, 15) 6 15 (10 ) 20 [] addArray() 2 (10 )

  • 156

    2553 ( 7 2/2553) ()

    Computer Programming using Java 11 - Recursion

    21 [] isMatrixEquals() 2 (10 )