TOPIC M: Recursion

Contents :

  Recursion.

Exercises :


D1:  Arrow.



S1: Factorial.


S2: Fibonacci.

  • Calculate the nth Fibonacci number with recursion (see Topic B: H1).
  • They are defined as a sequence of numbers:

  •             N<1> = 1, N<2> = 1
                N<i> = N<i-1> + N<i-2>     for i  > 2
  • Count the number of procedures calls (aantal keren dat de recursieve procedure werd aangeroepen).

  • S3: Twisting Triangle.




    tip: x1-x0 or y1-y0 can be negative, so it's better use INTEGERs



    S4: Backtracking.

    Gegeven volgende graph:

    Maak een procedure die het kortste pad tussen 2 nodes kan berekenen. Zoek dan het kortste pad tussen nodes 1 & 8. Start met deze code.
    Los op mbv. backtracking, maar optimaliseer je zoeken door de paden uit te sluiten waarin een node meermaals voorkomt.
    oplossing:

    S5: Fractals.


    Fractals are nice, practical examples of using recursion.
    Start with this code.



    X1: Opposite Order.



    H1:



    H2:




    T1: Output (exam '97)

    MODULE Test1;
      FROM IO IMPORT WrLn, WrChar;

      PROCEDURE Print(x: CHAR);
        VAR i:CHAR;
      BEGIN
        WrChar(x);
        FOR i := 'a' TO x DO
          WrChar('x');
        END;
        WrLn;
        IF x > 'a' THEN
          Print(CHR(ORD(x) - 1));
        END;
        WrChar(x);
        FOR i := 'a' TO x DO
          WrChar('x');
        END;
        WrLn;
      END Print;

    BEGIN
      Print('e');
    END Test1.