Can someone tell me line by line, with comments, what the below Java program is doing? I know it is a pain but it helps me learn. Please and Thank you Source code: //NonTailRecursiveFactorial Class Body class NonTailRecursiveFactorial {   public static long factorial(int n) { if (n == 0) { return 1; } return n * factorial(n - 1); }   public static void main(String[] args) { for (int i = 0; i <= 10; i++) { System.out.println(i + "! = " + factorial(i)); } } }     //TailRecursiveFactorial class body class TailRecursiveFactorial {   public static long factorial(int n) { return factorial(n, 1); }   private static long factorial(int n, long accumulator) { if (n == 0) { return accumulator; } return factorial(n - 1, accumulator * n); }   public static void main(String[] args) { for (int i = 0; i <= 10; i++) { System.out.println(i + "! = " + factorial(i)); } } } //Test class named as FactorialTest public class FactorialTest {   public static void main(String[] args) { testNonTailRecursiveFactorial(); testTailRecursiveFactorial(); }   public static void testNonTailRecursiveFactorial() { System.out.println("Testing Non-Tail Recursive Factorial:");   for (int i = 0; i <= 10; i++) { long result = NonTailRecursiveFactorial.factorial(i); long expected = calculateFactorial(i); System.out.println(i + "! = " + result + " (Expected: " + expected + ")"); assert result == expected : "Test failed!"; } }   public static void testTailRecursiveFactorial() { System.out.println("\nTesting Tail Recursive Factorial:");   for (int i = 0; i <= 10; i++) { long result = TailRecursiveFactorial.factorial(i); long expected = calculateFactorial(i); System.out.println(i + "! = " + result + " (Expected: " + expected + ")"); assert result == expected : "Test failed!"; } }   public static long calculateFactorial(int n) { if (n == 0) { return 1; } long factorial = 1; for (int i = 1; i <= n; i++) { factorial *= i; } return factorial; } }

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question
100%

Can someone tell me line by line, with comments, what the below Java program is doing? I know it is a pain but it helps me learn.

Please and Thank you

Source code:

//NonTailRecursiveFactorial Class Body

class NonTailRecursiveFactorial {

 

public static long factorial(int n) {

if (n == 0) {

return 1;

}

return n * factorial(n - 1);

}

 

public static void main(String[] args) {

for (int i = 0; i <= 10; i++) {

System.out.println(i + "! = " + factorial(i));

}

}

}

 

 

//TailRecursiveFactorial class body

class TailRecursiveFactorial {

 

public static long factorial(int n) {

return factorial(n, 1);

}

 

private static long factorial(int n, long accumulator) {

if (n == 0) {

return accumulator;

}

return factorial(n - 1, accumulator * n);

}

 

public static void main(String[] args) {

for (int i = 0; i <= 10; i++) {

System.out.println(i + "! = " + factorial(i));

}

}

}

//Test class named as FactorialTest

public class FactorialTest {

 

public static void main(String[] args) {

testNonTailRecursiveFactorial();

testTailRecursiveFactorial();

}

 

public static void testNonTailRecursiveFactorial() {

System.out.println("Testing Non-Tail Recursive Factorial:");

 

for (int i = 0; i <= 10; i++) {

long result = NonTailRecursiveFactorial.factorial(i);

long expected = calculateFactorial(i);

System.out.println(i + "! = " + result + " (Expected: " + expected + ")");

assert result == expected : "Test failed!";

}

}

 

public static void testTailRecursiveFactorial() {

System.out.println("\nTesting Tail Recursive Factorial:");

 

for (int i = 0; i <= 10; i++) {

long result = TailRecursiveFactorial.factorial(i);

long expected = calculateFactorial(i);

System.out.println(i + "! = " + result + " (Expected: " + expected + ")");

assert result == expected : "Test failed!";

}

}

 

public static long calculateFactorial(int n) {

if (n == 0) {

return 1;

}

long factorial = 1;

for (int i = 1; i <= n; i++) {

factorial *= i;

}

return factorial;

}

}

Expert Solution
Step 1: Given code:

//NonTailRecursiveFactorial Class Body

class NonTailRecursiveFactorial {


public static long factorial(int n) {

if (n == 0) {

return 1;

}

return n * factorial(n - 1);

}


public static void main(String[] args) {

for (int i = 0; i <= 10; i++) {

System.out.println(i + "! = " + factorial(i));

}

}

}



//TailRecursiveFactorial class body

class TailRecursiveFactorial {


public static long factorial(int n) {

return factorial(n, 1);

}


private static long factorial(int n, long accumulator) {

if (n == 0) {

return accumulator;

}

return factorial(n - 1, accumulator * n);

}


public static void main(String[] args) {

for (int i = 0; i <= 10; i++) {

System.out.println(i + "! = " + factorial(i));

}

}

}

//Test class named as FactorialTest

public class FactorialTest {


public static void main(String[] args) {

testNonTailRecursiveFactorial();

testTailRecursiveFactorial();

}


public static void testNonTailRecursiveFactorial() {

System.out.println("Testing Non-Tail Recursive Factorial:");


for (int i = 0; i <= 10; i++) {

long result = NonTailRecursiveFactorial.factorial(i);

long expected = calculateFactorial(i);

System.out.println(i + "! = " + result + " (Expected: " + expected + ")");

assert result == expected : "Test failed!";

}

}


public static void testTailRecursiveFactorial() {

System.out.println("\nTesting Tail Recursive Factorial:");


for (int i = 0; i <= 10; i++) {

long result = TailRecursiveFactorial.factorial(i);

long expected = calculateFactorial(i);

System.out.println(i + "! = " + result + " (Expected: " + expected + ")");

assert result == expected : "Test failed!";

}

}


public static long calculateFactorial(int n) {

if (n == 0) {

return 1;

}

long factorial = 1;

for (int i = 1; i <= n; i++) {

factorial *= i;

}

return factorial;

}

}

steps

Step by step

Solved in 4 steps with 5 images

Blurred answer
Follow-up Questions
Read through expert solutions to related follow-up questions below.
Follow-up Question

Can you also analyze the algorithm in Big-Oh notation and provide the appropriate analysis.

Please and Thank You

Solution
Bartleby Expert
SEE SOLUTION
Knowledge Booster
Random Class and its operations
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education