Я новичок в MIPS и пытаюсь написать рекурсивную программу. Программа рассчитает f(N)
, где N
- целое число больше нуля. f(N)= 3*(N-1)+f(N-1)+1
. Основной корпус: f(0)=2
. Однако, когда я пытаюсь запустить свою программу, он работает бесконечно, поэтому я предполагаю, что рекурсивные вызовы никогда не заканчиваются. Кажется, я не могу найти, где проблема. Мой код выглядит следующим образом.Программа рекурсии MIPS
.data
prompt: .asciiz "Please enter a number"
.text
.globl main
main:
li $v0, 4
la $a0, prompt
syscall
li $v0, 5
syscall
move $a0, $v0
jal factfunc
move $a0, $v0
li $v0, 1
syscall
li $v0, 10
syscall
factfunc:
addiu $sp, $sp, -8
sw $ra, 4($sp)
sw $s0, 0($sp)
move $s0, $a0
blez $s0, endCondition
addi $a0, $a0, -1
jal factfunc
li $s1, 0
li $s2, 0
addi $s1, $s0, -1
move $s2, $s1
addu $s2, $s2, $s2
addu $s1, $s2, $s1
addu $v0, $v0, $s1
addi $v0, $v0, 1
cleanUp:
lw $s0, 0($sp)
lw $ra, 4($sp)
jr $ra
endCondition:
li $v0, 2
b cleanUp
Я бы очень признателен за любую помощь. Благодаря!
Где функция 'F (n)'? Разве это не вызов, потому что это рекурсивно? – jww