Difference between revisions of "Tail Recursion Assignment"

From CSE425S Wiki
Jump to navigation Jump to search
 
Line 5: Line 5:
 
{{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 for <code>reverse</code> to invoke.
 
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.

Latest revision as of 01:53, 6 October 2020

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 Java.png
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 Junit.png
package: tail.assignment
source folder: src/test/java