Question: Hi, I need help with this lab! TailRecursion.java Download TailRecursion.javacontains 4 methods. Two of them (productRecursive and printArrayRecursive) are working, recursive implementations and the other

Hi, I need help with this lab!

TailRecursion.java Download TailRecursion.javacontains 4 methods. Two of them (productRecursive and printArrayRecursive) are working, recursive implementations and the other two (productLoop and printArrayLoop) are incomplete stubs. Your assignments is to complete the implementation of the stub methods by converting the corresponding recursive methods. TestTailRecursion.java Download TestTailRecursion.javacontains tests that you can use to check the correctness of your methods as you write your code. When you are done, you will only submit your completed version of of TailRecursion.java.

TailRecursion.java:

public class TailRecursion { public static int productRecursive(int[] array, int start) { if (array.length == 0) { return 0; } if (start == array.length) { return 1; } return array[start] * productRecursive(array, start + 1); } // TOOD: Complete this function by converting the above recursive method into // a non-recursive one. public static int productLoop(int[] array, int start) { int accum; while (true) { } } public static boolean isStringPalindromeRecursive(String s) { if (s.length() == 0 || s.length() == 1) { return true; } if (s.charAt(0) != s.charAt(s.length() - 1)) { return false; } return isStringPalindromeRecursive(s.substring(1, s.length() - 1)); } // TOOD: Complete this function by converting the above recursive method into // a non-recursive one. Note, that fact that there isn't a return value // does *not* prevent the method from being tail cursive. public static boolean isStringPalindromeLoop(String s) { while (true) { } // return false; } }

TestTailRecursion.java:

import static org.junit.jupiter.api.Assertions.*; import org.junit.jupiter.api.Test; class TestTailRecursion { @Test void testProductRecursion() { assertEquals(0, TailRecursion.productRecursive(new int[0], 0)); int[] array = new int[] { 1, 2, 3, 4 }; assertEquals(24, TailRecursion.productRecursive(array, 0)); array[0] = 10; assertEquals(240, TailRecursion.productRecursive(array, 0)); } @Test void testProductLoop() { assertEquals(0, TailRecursion.productLoop(new int[0], 0)); int[] array = new int[] { 1, 2, 3, 4 }; assertEquals(24, TailRecursion.productLoop(array, 0)); array[0] = 10; assertEquals(240, TailRecursion.productLoop(array, 0)); } @Test void isStringPalindromeRecursive() { assertTrue(TailRecursion.isStringPalindromeRecursive("")); assertTrue(TailRecursion.isStringPalindromeRecursive("a")); assertTrue(TailRecursion.isStringPalindromeRecursive("aa")); assertTrue(TailRecursion.isStringPalindromeRecursive("aaa")); assertTrue(TailRecursion.isStringPalindromeRecursive("aba")); assertTrue(TailRecursion.isStringPalindromeRecursive("abba")); assertTrue(TailRecursion.isStringPalindromeRecursive("abcba")); assertFalse(TailRecursion.isStringPalindromeRecursive("12345")); assertFalse(TailRecursion.isStringPalindromeRecursive("11441")); } @Test void isStringPalindromeLoop() { assertTrue(TailRecursion.isStringPalindromeRecursive("")); assertTrue(TailRecursion.isStringPalindromeRecursive("a")); assertTrue(TailRecursion.isStringPalindromeRecursive("aa")); assertTrue(TailRecursion.isStringPalindromeRecursive("aaa")); assertTrue(TailRecursion.isStringPalindromeRecursive("aba")); assertTrue(TailRecursion.isStringPalindromeRecursive("abba")); assertTrue(TailRecursion.isStringPalindromeRecursive("abcba")); assertFalse(TailRecursion.isStringPalindromeRecursive("12345")); assertFalse(TailRecursion.isStringPalindromeRecursive("11441")); } }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!