在MIPS中实现此递归函数

时间:2018-09-21 03:59:37

标签: c algorithm function mips computer-science

已给我分配了从MIPS中的C重新创建的任务。

function1(n) = (3*n)-5,如果n <= 3

function1(n) = (n-1)*function1(n-1) + function1(n-2) - n(如果n> 3

这是一个递归函数,它两次调用自己,如下所示:

int function1(int n)
{
    if (n <= 3)
     {
        int ans1 = (3*n)-5;
        return ans1;
     }
    else
     {
        int ans1 = (n-1)*function1(n-1) + function1(n-2) - n;
        return ans1;
     }
}

主要通过输入用户提供的整数来调用 function1

  void main()
  {
    int ans, n;

    printf("Enter an integer:\n");

    // read an integer from user and store it in "n"
    scanf("%d", &n);

    ans = function1(n);

    // print out the solution computed by function 1
    printf("The solution is: %d\n", ans);

    return;
}

到目前为止,我在MIPS中拥有的是:

.data
enterInt: .asciiz "Enter an integer:\n"
answer: .asciiz "The solution is: "

.text
.globl main

main:
li $v0, 4
la $a0, enterInt
syscall 
li $v0, 5
syscall
move $a0, $v0


jal function1

li $v0, 1   
syscall

jr $ra

function1:
addi $sp, $sp -4
sw $ra, 0($sp)
addi $sp, $sp, -4
sw $a0, 0($sp)


sle $t0, $a0, 3 #if n <= 3
beq $t0, $zero, else #if $t0 = 0, or when n > 3 exit to else

#basecase computation
addi $a0, $a0, -1


jal function1

else:   
#reversing the top
lw $a0, 0($sp)
addi $sp, $sp, 4
lw $ra, 0($sp)
addi $sp, $sp, 4
jr $ra

addi $a0 $a0, -2

jal function1


lw $ra, 0($sp)
lw $s0, 4($sp)
addi $sp, $sp, 8
jr $ra

我知道这是正确的,但老实说,我不知道从这里出发。任何方向都将有所帮助。谢谢!

0 个答案:

没有答案