В настоящее время я учусь на курсах по организации и дизайну компьютеров и пытаюсь понять MIPS весь семестр.Я пытаюсь преобразовать некоторый рекурсивный Java-код в MIPS, и мне было трудно связать его вместе.Моя главная проблема - это «вернуть 2 * Ханой (n-1) + 1».Я понимаю, как сделать часть Ханоя (n-1), но запутался, как умножить каждый вызов на 2 и добавить один.Вот мой код:
Java:
int Hanoi(int N) {
if(N == 1)
return 1;
return 2 * Hanoi(N-1) + 1;
}
MIPS Перевод:
hanoi:
# Hanoi(n) -> Checks if n == 1
subu $sp, $sp, 8
sw $ra, ($sp)
sw $s0, 4($sp)
# Base Case
li $v0, 1
beq $a0, $v0, to_other_case
move $s0, $a0
sub $a0, $a0, 1
jal hanoi
addi $s1, $zero, 2
mul $v0, $s0, $s1
addi $v0, $v0, 1
to_other_case:
lw $ra, ($sp)
lw $s0, 4($sp)
addu $sp, $sp, 8
jr $ra
Спасибо заранее за помощь!Я не обязательно ищу ответ, просто немного подтолкнуть в правильном направлении!