2014-12-01 5 views
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 

답변

1

위로 가기 작은 오류가 있습니다. 당신은 $ s3 = 당신이 말하는 것은 $ v0 - 1이지만 실제로는 $ v0입니다. 그리고 재귀 부분에서 $ s3을 사용합니다