1
안녕 얘들 아, 피보나치 시퀀스의 값을 n 번째 값 (사용자 입력)까지 인쇄해야합니다. 따라서 사용자가 3을 입력하면 1, 1, 2를 인쇄해야합니다. 재귀 적으로 반복적으로해야합니다. 반복 부분이 있지만 재귀 부분에 약간 문제가 있습니다. 프로그램에서 값을 인쇄 할 수 있습니다. 어떤 도움을 주시면 감사하겠습니다.밉스에서 재귀를 사용하여 피보나치 시퀀스 인쇄
.data
inputMsg: .asciiz "Enter number: "
iterationMsg: .asciiz "\nIterative: "
recursionMsg: .asciiz "\nRecursive: "
series: .asciiz "\nThe series is: "
space: .asciiz " "
.text
main:
la $a0, inputMsg #Print out inputMsg
li $v0, 4
syscall
li $v0, 5 #Read in integer into v0
syscall
subi $s0, $v0, 1 #s0 = v0-1
add $s7, $s0, 0 #s7 = s0
add $s3, $v0, 0 #s3 = v0-1
addi $s1, $s1, 1 #s1 = 1
addi $s2, $s2, 1 #s2 = 1
la $a0, iterationMsg #Print out text_iteration
li $v0, 4
syscall
la $a0, series #Print out series
syscall
addi $a0, $zero, 1 #a0 = 1
li $v0, 1
syscall #Prints out 1
jal iterative #Jump to iterative
la $a0, recursionMsg #Print Out Recursion text
li $v0, 4
syscall
la $a0, series #Print out Series text
syscall
add $a0, $s3, $0 #t0 = s3 = inputted val
add $s0, $0, $0
jal recursive
exit:
li, $v0, 10 #Exit Program
syscall
iterative:
beq $s0, 0, iterativeExit #if s0 = 0 then exit
subi $s0, $s0, 1 # s0 = s0
add $t0, $s2, $zero # t0 = s2(1) + 0
add $s2, $s1, $s2 # s2 = s1(1) + s2(1)
add $s1, $t0, $zero # s1 = t0(1) + 0
la $a0, space
li $v0, 4
syscall
add $a0, $s1, $zero
li $v0, 1
syscall
bnez $s0, iterative
iterativeExit:
jr $ra
recursive:
addi $sp, $sp, -4 #create/save stack
sw $ra, 0($sp)
sub $a0, $a0, 1 #minus one from inputted val (a0) till 0
beq $a0, 1, oneRec
jal recursive
jal print
lw $ra, 0($sp) #
addi $sp, $sp, 4 # decrease the stack size
jr $ra
oneRec:
li $a0, 1
li $v0, 1
syscall
addi $s0, $a0, 0
la $a0, space
li $v0, 4
syscall
jr $ra
print:
add $t0, $0, $a0
add $a0, $s0, $a0
li $v0, 1
syscall
la $a0, space
li $v0, 4
syscall
add $s0, $t0, $0
jr $ra