The following code is used to derive Fibonacci
(0, 1, 1, 2, 3, 5, 8, 13, 21, …) where each number is “add” of two previous ones.
int fib(int n){
if (n==0)
return 0;
else if (n == 1)
return 1;
else
return fib(n−1) + fib(n−2);
}
Explain why the following RISC-V assembly code works, you need to explain all the
details using the comments as hints?
# IMPORTANT! Stack pointer must remain a multiple of 16!!!!
1. addi x10,x10,8 # fib(8), you can change it
2. fib:
3. beq x10, x0, done # If n==0, return 0
4. addi x5, x0, 1
5. beq x10, x5, done # If n==1, return 1
6. addi x2, x2, -16 # Allocate 2 words of stack space
7. sd x1, 0(x2) # Save the return address
8. sd x10, 8(x2) # Save the current n
9. addi x10, x10, -1 # x10 = n-1
10. jal x1, fib # fib(n-1)
11. ld x5, 8(x2) # Load old n from the stack
12. sd x10, 8(x2) # Push fib(n-1) onto the stack
13. addi x10, x5, -2 # x10 = n-2
14. jal x1, fib # Call fib(n-2)
15. ld x5, 8(x2) # x5 = fib(n-1)
16. add x10, x10, x5 # x10 = fib(n-1)+fib(n-2)
17. # Clean up:
18. ld x1, 0(x2) # Load saved return address
19. addi x2, x2, 16 # Pop two words from the stack
20. done:
21. jalr x0, 0(x1)
to generate a solution
a solution
- Use C++arrow_forwardWrite a recursive form of the following: 0! = 1 n! = n * (n - 1)!arrow_forwardUsing recursion, write a function sum that takes a single argument n and computes the sum of all integers between 0 and n inclusive. Do not write this function using a while or for loop. Assume n is non-negative. def sum(n): """Using recursion, computes the sum of all integers between 1 and n, inclusive. Assume n is positive. >>> sum(1) 1 >>> sum(5) # 1 + 2 + 3+ 4+ 5 15 "*** YOUR CODE HERE ***"arrow_forward
- Which is the base case for the following recursive function? void printOut( int n ) // Print nonnegative n { if( n >= 10 ) printOut( n / 10 ); printDigit( n % 10 ); } Group of answer choices A.if ( n >= 10 ) B.printOut( n/10 ); C.printDigit( n%10 ); D.if ( n >= 10) E.None of the abovearrow_forwardPlease written by computer sourcearrow_forwardi = 1 while (i < n) do s = s + i i = i * 2 enddo Is the step count dependent on which term?arrow_forward
- What does the following recursive function do? int f(int n){ if (n==1) return 1; else returm n*f(n-1); } O sum of numbers from 1 to n Factorial of numbern Square of numbers from 1 to n Print the numbers from 1 to narrow_forwardWrite a recursive algorithm with the following prototype: int add (int x, int y); that returns x if y is 0; and adds x to y otherwise. THE FUNCTION MUST BE RECURSIVE. (hint: the base case should involve a test for y being 0; recursive case should reduce y towards 0)arrow_forward
- Database System ConceptsComputer ScienceISBN:9780078022159Author:Abraham Silberschatz Professor, Henry F. Korth, S. SudarshanPublisher:McGraw-Hill EducationStarting Out with Python (4th Edition)Computer ScienceISBN:9780134444321Author:Tony GaddisPublisher:PEARSONDigital Fundamentals (11th Edition)Computer ScienceISBN:9780132737968Author:Thomas L. FloydPublisher:PEARSON
- C How to Program (8th Edition)Computer ScienceISBN:9780133976892Author:Paul J. Deitel, Harvey DeitelPublisher:PEARSONDatabase Systems: Design, Implementation, & Manag...Computer ScienceISBN:9781337627900Author:Carlos Coronel, Steven MorrisPublisher:Cengage LearningProgrammable Logic ControllersComputer ScienceISBN:9780073373843Author:Frank D. PetruzellaPublisher:McGraw-Hill Education