已给我分配了从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
我知道这是正确的,但老实说,我不知道从这里出发。任何方向都将有所帮助。谢谢!