-
Notifications
You must be signed in to change notification settings - Fork 1
/
Fibonnacci_Recursive_Program.asm
76 lines (61 loc) · 1.19 KB
/
Fibonnacci_Recursive_Program.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
.data
prompt: .asciiz "Which number in the Fibonnacci Sequence do you want ? "
message: .asciiz "The number you asked for is "
.text
main:
#Prompts the user to enter in a number
li $v0,4
la $a0,prompt
syscall
#The number that the user has entered will be stored in $v0
li $v0,5
syscall
#The user input will be stored in the function parameter
move $a0,$v0
#Calling the Fibonacci Function
jal Fibonacci
move $s0,$v0
#Displaying the answer
li $v0,4
la $a0,message
syscall
li $v0,1
move $a0,$s0
syscall
#End of program
li $v0,10
syscall
Fibonacci:
#Base Case for the recursive function
#if(n<=1)
beq $a0,1,FibonacciEnd1
blt $a0,1,FibonacciEnd2
#Fibonacci(n-1)
addi $sp,$sp,-4
sw $ra,0($sp)
addi $a0,$a0,-1
jal Fibonacci
addi $a0,$a0,1
lw $ra,0($sp)
addi $sp,$sp,4
addi $sp,$sp,-4
sw $v0,0,($sp)
#Fibonacci(n-2)
addi $sp,$sp,-4
sw $ra,0($sp)
addi $a0,$a0,-2
jal Fibonacci
addi $a0,$a0,2
lw $ra,0($sp)
addi $sp,$sp,4
lw $t0,0($sp)
#Fibonacci(n-2)+Fibonacci(n-1)
addi $sp,$sp,4
add $v0,$v0,$t0
jr $ra
FibonacciEnd1:
li $v0,1
jr $ra
FibonacciEnd2:
move $v0,$a0
jr $ra