Итак, я понимаю логику расчета суммы цифр. Мне просто интересно, правильна ли эта рекурсивная функция. Предположим, что пользователь уже ввел номер, который он или она хочет получить цифру и хранится в $ v0.Сумма рекурсии Mips
Sum2:
li $s0, 0
move $a1, $v0
li $s1, 0
li $s2, 10
# I am adjusting the stack frame size to store 3 words
addi $sp, $sp,-12
# These are the sum value, the return address, and the number
sw $s1, 0($sp)
sw $ra, 4($sp)
sw $a1, 8($sp)
Loop2: bne $s0, $a1, SUM3
move $a0, $s1
li $v0, 1
syscall
lw $s1, 0($sp)
lw $ra, 4($sp)
lw $a1, 8($sp)
addi $sp, $sp 12
jr $ra
SUM3:
div $t0, $a1, $s2
mfhi $t0
add $s1, $s1, $t0
div $t1, $a1, $s2
mflo $a1
j Loop2
Если логика не ясно, что я имею в первую проверку, чтобы увидеть, если число не равно нулю, и если это не я, то получить модуль числа, деленной на 10 и добавить его в сумма, которая изначально равна 0, а затем делит вводный номер пользователя на 10 и продолжает вызывать функцию до тех пор, пока номер не станет нулевым. У меня также был один последний последний вопрос. В Mips рекурсивная функция или итеративная функция выполняются быстрее?
_ «Мне просто интересно, правильная ли эта рекурсивная функция». _ Что происходит, когда вы запускаете ее? Это похоже на самый простой способ определить правильность реализации. Однако ваша реализация не выглядит рекурсивной для меня. – Michael
Это работает, но я не был уверен, рекурсивный или нет. Я думал, что работа с указателем стека сделает его рекурсивным –