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
vivado [14]
3 years ago
6

Write code to complete factorial_str()'s recursive case. Sample output with input: 5 5! = 5 * 4 * 3 * 2 * 1 = 120

Computers and Technology
1 answer:
tamaranim1 [39]3 years ago
8 0

Answer:

Here is the complete code to complete factorial_str()'s recursive case:

Just add this line to the recursive part of the code for the solution:

output_string += factorial_str(next_counter,next_value)  

The above statement calls factorial_str() method recursively by passing the values of next_counter and next_value. This statement continues to execute and calls the factorial_str() recursively until the base case is reached.

Explanation:

Here is the complete code:

def factorial_str(fact_counter, fact_value):  #method to find the factorial

   output_string = ''   #to store the output (factorial of an input number)

   if fact_counter == 0:  # base case 1 i.e. 0! = 1

       output_string += '1'  # displays 1 in the output

   elif fact_counter == 1:  #base case 2 i.e. 1! = 1

       output_string += str(fact_counter) + ' = ' + str(fact_value)  #output is 1

   else:  #recursive case

       output_string += str(fact_counter) + ' * '  #adds 8 between each value of fact_counter

       next_counter = fact_counter - 1  #decrement value of fact_counter by 1

       next_value = next_counter * fact_value  #multiplies each value of fact_value by next_counter value to compute the factorial

       output_string += factorial_str(next_counter,next_value) #recursive call to factorial_str to compute the factorial of a number

   return output_string   #returns factorial  

user_val = int(input())  #takes input number from user

print('{}! = '.format(user_val),end="")  #prints factorial in specified format

print(factorial_str(user_val,user_val))  #calls method by passing user_val to compute the factorial of user_val

I will explain the program logic with the help of an example:

Lets say user_val = 5

This is passed to the method factorial_str()

factorial_str(fact_counter, fact_value) becomes:

factorial_str(5, 5):  

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

output_string += str(fact_counter) + ' * '  adds an asterisk after the value of fact_counter i.e. 5 as:

5 *

next_counter = fact_counter - 1 statement decrements the value of fact_counter  by 1 and stores that value in next_counter. So

next_counter = 5 - 1

next_counter = 4

next_value = next_counter * fact_value  multiplies the value of next_counter by fact_value and stores result in next_value. So

next_value = 4 * 5

next_value = 20

output_string += factorial_str(next_counter,next_value)  this statement calls the factorial_str() to perform the above steps again until the base condition is reached. This statement becomes:

output_string = output_string + factorial_str(next_counter,next_value)

output_string = 5 * 4 = 20

output_string = 20

Now factorial_str(next_counter,next_value) becomes:

factorial_str(4,20)

output_string += str(fact_counter) + ' * ' becomes

5 * 4 * 3

next_counter = fact_counter - 1  becomes:

4 - 1 = 3

next_counter = 3

next_value = next_counter * fact_value  becomes:

3 * 20 = 60

next_value = 60

output_string = 5 * 4 * 3= 60

output_string = 60

factorial_str(next_counter,next_value) becomes:

factorial_str(3,60)

output_string += str(fact_counter) + ' * ' becomes

5 * 4 * 3 * 2

next_counter = fact_counter - 1  becomes:

3 - 1 = 2

next_counter = 2

next_value = next_counter * fact_value  becomes:

2 * 60 = 120

next_value = 120

output_string += factorial_str(next_counter,next_value) becomes:

output_string = 120 + factorial_str(next_counter,next_value)

output_string = 5 * 4 * 3 * 2 = 120

factorial_str(2,120)

output_string += str(fact_counter) + ' * ' becomes

5 * 4 * 3 * 2 * 1

next_counter = fact_counter - 1  becomes:

2 - 1 = 1

next_counter = 1

next_value = next_counter * fact_value  becomes:

1 * 120 = 120

next_value = 120

output_string += factorial_str(next_counter,next_value) becomes:

output_string = 120 + factorial_str(next_counter,next_value)

factorial_str(next_counter,next_value) becomes:

factorial_str(1, 120)

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

elif fact_counter == 1

So the elif part executes which has the following statement:

output_string += str(fact_counter) + ' = ' + str(fact_value)  

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

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

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

You might be interested in
What should a valid website have?
zzz [600]
The answer is A.....
4 0
3 years ago
When the animation and the graphic designs are used to sell products or services, it is known as multimedia advertising. The sta
Aliun [14]

\qquad \qquad\huge \underline{\boxed{\sf Answer}}

The Correct choice is " True "

When the animation and the graphic designs are used to sell products or services, it is known as multimedia advertising.

3 0
3 years ago
Mergesort uses the divide-and-conquer technique to sort a list.<br><br> True<br><br> False
NARA [144]

Answer:

True: Merge Sort sorts a list using divide-conquer approach.

<u>Merge_Sort(B,p,n)</u>  //p is the starting index of array B and n is the last index.

1. if(p<n)

2.        q ← (p+n)/2    //divides the list into two sub-lists

2.        Merge_Sort(B, p, q) //sorts the left half

3.        Merge_Sort(B, q+1, n) //sorts the right half.

4.        Merge(B, p, q, n)

<u>Merge(B, p, q, n)</u>

1.l ← q-p+1.  //no. of elements in left half

2.m ← n-q  //no. of elements in right half.

3.for x ← 1 to l

4.      Left[x] = B[p+x -1] //The elements of left half are copied to Left array

5.for y ← 1 to m.

6.      Right[y]= B[q+y]  //The elements of right half are copied to right array

7. x ← 1, y ←1

8.for z ← p to n.

9.      if( Left[x] ≤ Right[y] ) // to merge the two lists Left and Right, the    //elements are compared.

10.     {   A[z] ← Left[x]   //smaller one comes to the merged list.

11.          x++. }

12.    else

13.      {   A[z] ← Right[y]

14.          y++ }

Explanation:

The Merge_Sort(A, p, n) algorithm first divides the whole array into two halves. Then again divides the sub-lists into it's halves and so on.

Then using merge algorithm it compares the elements of both halves one by one and keep it in sorted order.

6 0
3 years ago
Look at the slide. How could the slide best be improved? By reducing the number of visual aids by increasing the font size by da
azamat

Answer:

b.  by providing more information

Explanation:

5 0
3 years ago
Read 2 more answers
What is the most important function of a network operating system (NOS)?
Makovka662 [10]
Encrypting data traffic to ensure network security
5 0
3 years ago
Read 2 more answers
Other questions:
  • These things are commonly found on the front of desktop computer cases:
    12·1 answer
  • Where do today's computers store almost all motherboard configuration data?
    15·1 answer
  • What is an example of a transition effectl
    7·1 answer
  • Differentiate between Scope and Linkage
    8·1 answer
  • Employees at the Red Bluff Golf Club &amp; Pro Shop have the opportunity to become certified trainers if they log enough hours.
    13·1 answer
  • When Tim Berners-Lee developed the first specifications, protocols, and tools for the World Wide Web in 1993, his employers at C
    12·1 answer
  • For this assignment, select one of the organizations with a prominent IT department from the Topic 1 assignment. Once identified
    11·1 answer
  • How can the use of new technology in industry benefit the us government
    8·2 answers
  • Which of the following are valid variable names? Select 2 options.
    14·1 answer
  • Answer This One Question Right For Brainliest
    10·1 answer
Add answer
Login
Not registered? Fast signup
Signup
Login Signup
Ask question!