1answer.
Ask question
Login Signup
Ask question
All categories
  • English
  • Mathematics
  • Social Studies
  • Business
  • History
  • Health
  • Geography
  • Biology
  • Physics
  • Chemistry
  • Computers and Technology
  • Arts
  • World Languages
  • Spanish
  • French
  • German
  • Advanced Placement (AP)
  • SAT
  • Medicine
  • Law
  • Engineering
Dimas [21]
3 years ago
8

Write code to complete PrintFactorial()'s recursive case. Sample output if userVal is 5:5! = 5 * 4 * 3 * 2 * 1 = 120

Computers and Technology
1 answer:
garik1379 [7]3 years ago
6 0

Answer:

Here is the C++ program:

#include <iostream>  //to use input output functions

using namespace std;   //to access objects like cin cout

void PrintFactorial(int factCounter, int factValue){  // method definition

  int nextCounter = 0;  // initialize value of nextCounter by 0

  int nextValue = 0;   // initialize value of nextValue by 0

  if (factCounter == 0) { //base case 1: 0! = 1          

     cout << "1" << endl;    }  //displays 1 in the output

  else if (factCounter == 1) {  //base case 2: 1! = 1  

     cout << factCounter << " = " << factValue << endl;    } //displays 1 in result    

  else {  //recursive case                          

     cout << factCounter << " * ";

     nextCounter = factCounter - 1;  //decrements factCounter by 1

     nextValue = nextCounter * factValue;  // multiplies values of nextCounter and factValue and assigns the result to nextValue

PrintFactorial( nextCounter,  nextValue);    } }  //recursively calls PrintFactorial method to compute the factorial

int main() {  //start of main function

  int userVal = 0;   //initialize the userVal variable to 0

  userVal = 5;  //assigns 5 to the userVal variable

  cout << userVal << "! = ";  //prints the userVal with ! =

  PrintFactorial(userVal, userVal); } //calls PrintFactorial method to compute the factorial of userVal i.e. 5

Explanation:

I will explain the logic of the program with an example.

The value of variable userVal is 5  

This is passed to the method PrintFactorial()

1st step:

void PrintFactorial(int factCounter, int factValue) becomes:  

PrintFactorial(5, 5)

PrintFactorial method has two base conditions which do not hold because the factCounter is 5 here which is neither 1 nor 0 so the program control moves to the recursive part.  

cout << factCounter << " * ";

In recursive part, the above statement prints the value of factCounter  followed by an asterisk on the output screen. So this prints:

5 *

nextCounter = factCounter - 1;

This statement decrements the value of factCounter by 1 and assigns it to nextCounter as:

nextCounter = 5 - 1;

nextCounter = 4

nextValue = nextCounter * factValue;  multiplies the value of nextCounter by factValue and stores result in nextValue . So

nextValue = 4 * 5  

nextValue = 20

PrintFactorial( nextCounter,  nextValue);  this statement calls the PrintFactorial() recursively to perform the above steps again until the base condition is reached. This statement becomes:  

PrintFactorial(4,20)

2nd step:

PrintFactorial method has two base conditions which do not hold because the factCounter is 4 here which is neither 1 nor 0 so the program control moves to the recursive part.  

cout << factCounter << " * ";

In recursive part, the above statement prints the value of factCounter  followed by an asterisk on the output screen. So this prints:

5* 4 *

nextCounter = factCounter - 1;

This statement decrements the value of factCounter by 1 and assigns it to nextCounter as:

nextCounter = 4 - 1;

nextCounter = 3

nextValue = nextCounter * factValue;  multiplies the value of nextCounter by factValue and stores result in nextValue . So

nextValue = 3 * 20

nextValue = 60

PrintFactorial( nextCounter,  nextValue);   This statement becomes:  

PrintFactorial(3,60)

3rd step:

PrintFactorial method has two base conditions which do not hold because the factCounter is 3 here which is neither 1 nor 0 so the program control moves to the recursive part.  

cout << factCounter << " * ";

In recursive part, the above statement prints the value of factCounter  followed by an asterisk on the output screen. So this prints:

5* 4 * 3 *

nextCounter = factCounter - 1;

This statement decrements the value of factCounter by 1 and assigns it to nextCounter as:

nextCounter = 3 - 1;

nextCounter = 2

nextValue = nextCounter * factValue;  multiplies the value of nextCounter by factValue and stores result in nextValue . So

nextValue = 2 * 60

nextValue = 120

PrintFactorial( nextCounter,  nextValue);  This statement becomes:  

PrintFactorial(2,120)

4th step:

PrintFactorial method has two base conditions which do not hold because the factCounter is 2 here which is neither 1 nor 0 so the program control moves to the recursive part.  

cout << factCounter << " * ";

In recursive part, the above statement prints the value of factCounter  followed by an asterisk on the output screen. So this prints:

5* 4 * 3 * 2 *

nextCounter = factCounter - 1;

This statement decrements the value of factCounter by 1 and assigns it to nextCounter as:

nextCounter = 2 - 1;

nextCounter = 1

nextValue = nextCounter * factValue;  multiplies the value of nextCounter by factValue and stores result in nextValue . So

nextValue = 1 * 120

nextValue = 120

PrintFactorial( nextCounter,  nextValue);  This statement becomes:  

PrintFactorial(1,120)

Now the base case 2 evaluates to true because nextCounter is 1

cout << factCounter << " = " << factValue  statement prints the value of factCounter i.e. 1 followed by an equal sign = followed by value of factValue i..e 120

So the output of the above program with userVal = 5 is:  

5! = 5 * 4 * 3 * 2 * 1 = 120

You might be interested in
If I want to copy a worksheet, I right-click the sheet on the bottom of the screen and click what menu item?
stellarik [79]
It depends on what application are you using
6 0
3 years ago
What are the advantages of the java.util.Stack implementation of a stack?
klemol [59]

Explanation:

The advantages of java.util.Stack are as following:-

  1. java.util.Stack is an implementation of the vector class hence it can keep track of position of elements in the stack hence it is not required to store an additional pointer for each node.
  2. In the implementation it allocates space only that much is needed.

These are the two advantages of java.util.Stack.

3 0
4 years ago
While browsing through the mall, you are given samples of the latest perfumes from different designers. This is an example of wh
Firdavs [7]
The answer is A. Brand contact.
8 0
3 years ago
What is the maximum value for any octet in an ipv4 ip address?
VladimirAG [237]
They're bytes consisting of 8 bits, so the max value is 2^8-1 = 255
3 0
4 years ago
Tom wants to send an image by email to his friend Nadia. He needs to reduce
erica [24]

<u>1</u><u>s</u><u>t</u><u> </u><u>Method:</u>

  • Reduce the size of the image in <u>Paints.</u>

<u>2</u><u>n</u><u>d</u><u> </u><u>Method:</u>

  • Right-click the selected file you want to send.
  • Click on <u>Send To</u> > M<u>ail Recipient</u>.
  • The Send Pictures via E-mail dialog box appears.
  • Click <u>Make all my pictures smaller</u>, and then click OK.

Hope you could understand.

If you have any query, feel free to ask

6 0
3 years ago
Other questions:
  • A security administrator is implementing a SIEM and needs to ensure events can be compared against each other based on when the
    11·1 answer
  • These statements describe the NOS.(choose all that applies)
    13·2 answers
  • Diagnosing is solving the problem, and trouble shooting is figuring out what the problem is.
    15·1 answer
  • While it might be considered "old-school," which action should you take if you are unsure how a page will print, even after look
    7·1 answer
  • Which of the following statements is true?A)Implicit data type conversion is performed when you mix values of different data typ
    5·1 answer
  • Explain the four misconceptions about entrepreneurship.
    7·1 answer
  • O
    14·1 answer
  • 2023 murano’s available intelligent awd adjusts the ________ to help maintain cornering control.
    11·1 answer
  • Which popular tool is used in agile software development TCS?
    10·1 answer
  • Briefly describe the function of options in a linux command and give an example of a useful option.
    15·1 answer
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!