botrethewey / recursion-tracing

Recursion Practice Problems

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Recursion Problems

Definitions

Define the following:

  • Recursion: a method that calls itself, it is the opposite of iterrative
  • Recursive Case: the part of the method where recursion happens
  • Base Case: the part that contains conditional statement to stop the recursion
  • Activation Chain/Stack: "bubbles", tracing of each iteration of the recursive method
  • Activation Record/Call: each "bubble" of the Activation Chain containing informations regarding the methods parameters, local variables, and the location within the code to return values to
  • Infinite Recursion/Stack Overflow/Stack too deep: occurs when the value inputed into a recursive method fails to catch the base case, and the method attempts to call itself infinitely many times.

Tracing through a recursive method

Trace #1

def mystery1(n)
  if n == 1
    return n
  else
    return n + mystery1(n-1)
  end
end
  • What is mystery1(5)? 15

  • What is mystery1(10)? 55

  • What is mystery1(0)? Stack too deep

Trace #2

def mystery2(n)
  if n < 10
    return n
  else
    return (n%10) + mystery2(n/10)
  end
end
  • What is mystery2(123)? 6
  • What is mystery2(9005)? 14
  • What is mystery2(-123)? -123
  • Added Fun: How could we make mystery2(-123) work the way we might expect it to work instead of the way it does?

Trace #3

def mystery3(n)
  if n == 0
    return 100
  elsif n == -1
    return 200
  end
  if n%2 == 0
    return mystery3(n/2)
  else
    return mystery3(n-1)
  end
end
  • What is mystery3(1)? 100
  • What is mystery3(13)? 100
  • What is mystery3(-6)? 200

Trace #4

def mystery4(b,e)
  if e == 0
    return 1
  else
    return b * mystery4(b,e-1)
  end
end
  • What is mystery4(10,2)? 100
  • What is mystery4(4,3)? 64
  • What is mystery4(5,0)? 1

Trace #5

def mystery5(s)
  if s.length == 0
    return ""
  else
    return "*" + mystery5(s[1..-1])
  end
end
  • What is mystery5("hi")? "**"
  • What is mystery5("")? ""
  • What is mystery5("Hi, there!")? "**********"
  • Added Fun: How could we make only alphabetic characters to be changed to stars?

Trace #6

def mystery6(s)
  if s == nil || s.length == 0
    return ""
  else
    space = 0
    until space >= s.length || s[space] == " "
      space += 1
    end
    return mystery6(s[(space+1)..-1]) + " " + s[0...space]
  end
end
  • What is mystery6("goodnight moon")? "moon goodnight"
  • What is mystery6("Ada Developers Academy")? "Academy Developers Ada"
  • What is mystery6("Hi, there!")? "there! Hi,"
  • Added Fun: How could we make the reversal happen by letter, instead of by word (i.e. Make it so that mystery6("goodnight moon") returned "noom thgindoog")?

About

Recursion Practice Problems


Languages

Language:Ruby 100.0%