递归,同时还会影响MIPS汇编语言中每​​个递归调用的结果

时间:2019-02-14 04:06:12

标签: recursion mips

我目前正在参加计算机组织和设计课程,整个学期都在努力掌握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

非常感谢您的帮助!我并不一定要寻找答案,只是向正确的方向轻轻一点!

0 个答案:

没有答案