-
Notifications
You must be signed in to change notification settings - Fork 30
Cynthia Cobb - Recursion Tracing #29
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
base: master
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,12 +4,19 @@ | |
| Define the following: | ||
|
|
||
| - Recursion | ||
| - When the result of a method dependes on the result of the same method but called with a smaller case. You know you have a recrusive method if the method calls its self | ||
| - Recursive Case | ||
| - The expression of code where the method is calling its self | ||
| - Base Case | ||
| - the expression of code where the recursion stops | ||
| - Activation Chain/Stack | ||
| - A recurive method has to keep track of each instance the method is being called - the function does this with stack that holds each instantiation. | ||
| - Activation Record/Call | ||
| - An activation record is an individual "item" in the activation stack | ||
| - Infinite Recursion/Stack Overflow/Stack too deep | ||
| - When the recrusive method will never reach the base case - it will go one forever/computer will error cause it doesn't have enough memory to keep track of all the times the method has been called. - IE the Activation Stack is too large for the computers memory | ||
| - Tail Recursion | ||
| - normally every recurive call has to complete before the method begins to do work to find the result - in tail recursion the end result is being updated with each new instantiation | ||
|
|
||
| ## Tracing through a recursive method | ||
|
|
||
|
|
@@ -24,10 +31,13 @@ def mystery1(n) | |
| end | ||
| ``` | ||
|
|
||
| - What is mystery1(5)? | ||
| - What is mystery1(10)? | ||
| - What is mystery1(0)? | ||
| - What is mystery1(5)? | ||
| - 15 | ||
|
|
||
| - What is mystery1(10)? | ||
| - 55 | ||
| - What is mystery1(0)? | ||
| - infinite recursion - will never reach base-case | ||
| ### Trace #2 | ||
| ``` | ||
| def mystery2(n) | ||
|
|
@@ -40,9 +50,13 @@ 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?_ | ||
| - Depends on if we want -123 to be -1 + 2 + 3 or - (1 + 2 + 3). Either case we need to add a condition that checks to see if the integer passed is negative - if true, than decided if we should take the absolute value - run the method and at the end make it negative again | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Excellent observation!! I'd want the latter, but wanted ambiguity to see what people would consider and assume. |
||
|
|
||
| ### Trace #3 | ||
| ``` | ||
|
|
@@ -61,8 +75,11 @@ end | |
| ``` | ||
|
|
||
| - What is mystery3(1)? | ||
| - 100 | ||
| - What is mystery3(13)? | ||
| - 100 | ||
| - What is mystery3(-6)? | ||
| - 200 | ||
|
|
||
| ### Trace #4 | ||
| ``` | ||
|
|
@@ -76,8 +93,12 @@ end | |
| ``` | ||
|
|
||
| - What is mystery4(10,2)? | ||
| - 10^ 2 = 100 | ||
| - What is mystery4(4,3)? | ||
| - 4^3 = 64 | ||
| - What is mystery4(5,0)? | ||
| - 5^0 = 1 | ||
| - NOTE: I did trace the recursions and at the end noticed the pattern of b^e :) | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. :) |
||
|
|
||
| ### Trace #5 | ||
| ``` | ||
|
|
@@ -91,9 +112,14 @@ end | |
| ``` | ||
|
|
||
| - What is mystery5("hi")? | ||
| "**" | ||
| - What is mystery5("")? | ||
| "" | ||
|
|
||
| - What is mystery5("Hi, there!")? | ||
| "**********" (10 - * characters) | ||
| - _Added Fun: How could we make only alphabetic characters to be changed to stars?_ | ||
| Add a condition that checks each value by index. if it's a alpha character, then the values only becomes a * | ||
|
|
||
| ### Trace #6 | ||
| ``` | ||
|
|
@@ -111,6 +137,9 @@ end | |
| ``` | ||
|
|
||
| - What is mystery6("goodnight moon")? | ||
| - " moon goodnight" | ||
| - What is mystery6("Ada Developers Academy")? | ||
| - " Academy Developers Ada" | ||
| - What is mystery6("Hi, there!")? | ||
| - " there! Hi," | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. minor, but notable: there should be leading spaces at the front of each of these answers: " moon goodnight", " Academy Developers Ada", " 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")?_ | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"expression of code" is a weird term to me. Your idea is right, but seems like strange wording to me.