Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stacks - Jackie - Recursion Tracing #18

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 116 additions & 0 deletions jackies-answers.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,116 @@
# Recursion Problems

## Definitions
Define the following:

- Recursion - when a method calls itself
- Recursive Case - the case that includes a version of itself
- Base Case - stopping case -- the case that has a known answer
- Activation Chain/Stack -> all the levels of each time a recursive method is called until it hits the base case.
- Activation Record/Call -> the temporary storage for each level of recursion
- Infinite Recursion/Stack Overflow/Stack too deep -> when a case goes on forever
- Tail Recursion -> a recursive method with an end

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one isn't correct, but we didn't cover it in class.


## 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 level 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")?_