Mips:功能麻烦

时间:2014-03-07 19:15:13

标签: function recursion mips

尝试创建一个函数,使得f(0)= 8,并且f(n)= 4f(n-1) - n + 5,如果n> 0递归,但无法使其正常运行

 # $a0 = inpyt
 # $v0 = return value

f:     bnez  $a0, greaterthan0
       li $v0, 8
       jr $ra

greaterthan0: addi $sp,$sp,-8
              sw $ra, 0($sp) 
              sw $a0,4($sp)
              sub $t3,$a0,1 # n-1=n
              jal f

              lw $ra, ($sp)
              lw $a0, 4($sp)
              addi $sp,$sp,8
              sll $t0,$t3,2 # mul n-1 by 4
              sub $t1,$t0,$t3
              addi $t2,$t1,5 # add 5 to n
              jr $ra

1 个答案:

答案 0 :(得分:1)

这里有一些问题。

这里的第一个问题是你没有遵循你已经通过传递$a0中的输入并返回$v0中的值而设定的约定。

要解决此问题,请将sub $t3,$a0,1 # n-1=n更改为sub $a0,$a0,1 # n-1=naddi $t2,$t1,5 # add 5 to naddi $v0,$t1,5 # add 5 to n

接下来,您会选择一些数学错误来评估f(n-1) - n + 5

首先,评论mul n-1 by 4从根本上是错误的,因为我们实际上希望多次f(n-1)为4.在递归调用返回后,f(n-1)的值当然存储在{ {1}}。

以下是我的修复:

$v0