Recursion
What is recursion
• Looping without a loop statement

• A function that is part of its own
  definition

• Can only work if there’s a terminating
  condition, otherwise it goes forever
  (the base case)
A recursive function
• N Factorial
• 1!   =   1
  2!   =   1   x   2   =   2
  3!   =   1   x   2   x   3 = 2! x 3 = 6
  N!   =   1   x   2   x   3 x .... (N-2) x (N-1) x N = (N-1)! x N
How recursion is handled
• Every time a function is called, the
  function values, local variables,
  parameters and return addresses are
  pushed onto the stack.

• Over and Over again
• You might run out!
Dry-running a recursive call
Procedure Printsequence(n)
    n <- n-1
    if n > 1 then
       Printsequence(n)
    endif
    output(n)
EndProcedure
Dry-running a recursive call
Procedure Printsequence(n)
    n <- n-1
    if n > 1 then
       output(n)
       Printsequence(n)
    endif

EndProcedure
How to write a recursive
         procedure
• Code the general case
  Result = n * Factorial(n-1)
• Code the base case
  Result = 1
• Ensure that the base case is reached
  after a finite number of recursive calls

Recursion

  • 1.
  • 2.
    What is recursion •Looping without a loop statement • A function that is part of its own definition • Can only work if there’s a terminating condition, otherwise it goes forever (the base case)
  • 3.
    A recursive function •N Factorial • 1! = 1 2! = 1 x 2 = 2 3! = 1 x 2 x 3 = 2! x 3 = 6 N! = 1 x 2 x 3 x .... (N-2) x (N-1) x N = (N-1)! x N
  • 4.
    How recursion ishandled • Every time a function is called, the function values, local variables, parameters and return addresses are pushed onto the stack. • Over and Over again • You might run out!
  • 5.
    Dry-running a recursivecall Procedure Printsequence(n) n <- n-1 if n > 1 then Printsequence(n) endif output(n) EndProcedure
  • 6.
    Dry-running a recursivecall Procedure Printsequence(n) n <- n-1 if n > 1 then output(n) Printsequence(n) endif EndProcedure
  • 7.
    How to writea recursive procedure • Code the general case Result = n * Factorial(n-1) • Code the base case Result = 1 • Ensure that the base case is reached after a finite number of recursive calls