Difference between revisions of "Tail Recursion Assignment"
Jump to navigation
Jump to search
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
+ | =Motivation= | ||
+ | Sometimes we choose tail recursion for the performance improvement which can be achieved by a language implementation optimization. Sometimes the tail recursive version is the cleaner implementation. Reverse is an example where the right way to build it is tail recursive. | ||
=Code To Implement= | =Code To Implement= | ||
==Reverse== | ==Reverse== | ||
{{JavaToImplement|Reverse|reverse|tail.assignment}} | {{JavaToImplement|Reverse|reverse|tail.assignment}} | ||
− | <nowiki>public static <E> ImmutableList<E> reverse(ImmutableList<E> original)</nowiki> | + | <nowiki>public static <E> ImmutableList<E> reverse(ImmutableList<E> original)</nowiki> |
− | You will want to build a [https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html private] [https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html static] helper method which is tail recursive. | + | You will want to build a [https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html private] [https://docs.oracle.com/javase/tutorial/java/javaOO/classvars.html static] helper method which is tail recursive for <code>reverse</code> to invoke. |
=Test= | =Test= | ||
{{TestSuite|ReverseTestSuite|tail.assignment}} | {{TestSuite|ReverseTestSuite|tail.assignment}} |
Latest revision as of 01:53, 6 October 2020
Contents
Motivation
Sometimes we choose tail recursion for the performance improvement which can be achieved by a language implementation optimization. Sometimes the tail recursive version is the cleaner implementation. Reverse is an example where the right way to build it is tail recursive.
Code To Implement
Reverse
class: | Reverse.java | ![]() |
methods: | reverse | |
package: | tail.assignment | |
source folder: | src/main/java |
public static <E> ImmutableList<E> reverse(ImmutableList<E> original)
You will want to build a private static helper method which is tail recursive for reverse
to invoke.
Test
class: | ReverseTestSuite.java | ![]() |
package: | tail.assignment | |
source folder: | src/test/java |