在MIPS中实现递归函数

时间:2016-03-09 15:39:09

标签: recursion mips

我对如何在mips中编译递归函数感到有点困惑: 以下问题出现在我的计算机组织课程的前一次考试中: 这个问题要求我们编译:

int sum(int n){
    if (n <= 1)
        return 1;
    else
        return n + sum( sum(n-1) – sum(n-2) );
} 

我尝试解决这个问题:

sum: bgt $a0, 1, sum_recursive
add $v0, $0,1
jr $ra


sum_recursive: sub $sp, $sp, -12
sw $ra ,0($sp)     # storing the return address
sw $a0, 4($sp)     # storing the argument n

addi $a0, $a0, -1  # n-1
jal sum
sw $v0, 8($sp)     # the return value of sum(n-1)
lw $a0, 4($sp)     # a0=n

addi $a0, $a0, -2  # a0=n-2
jal sum
lw $t0, 8($sp)     # the return value of sum (n-1)
sub $v0, $t0, $v0  # sum(n-1) - sum (n-2)
lw $a0, 4($sp)     

add $a0, $v0, $0  # a0=sum (n-1)-sum (n-2)
jal sum
lw $a0, 4($sp)     
add $v0, $v0, $a0 # $v0 = n+ sum (sum (n-1)- sum(n-2))
lw $ra, 0($sp)
lw $a0, 4 ($sp)
add $sp, $sp, 12
jr $ra

谢谢

0 个答案:

没有答案