我目前正在参加计算机组织和设计课程,整个学期都在努力掌握MIPS。我正在尝试将一些递归Java代码转换为MIPS,但无法将其捆绑在一起。我的主要问题是称呼'return 2 * hanoi(n-1)+ 1'。我知道如何做hanoi(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
非常感谢您的帮助!我并不一定要寻找答案,只是向正确的方向轻轻一点!