我为递归函数编写了一个简单的代码,该代码在C语言中执行以下操作:
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;
}
}
然后主调用函数。
显然,它没有返回预期的答案。当输入为“ 8”时,预期输出为“ 7842”。我的代码有什么问题?
假设我已经声明了用于输出的所有字符串变量
main:
la $a0, msg1
li $v0, 4
syscall
li $v0, 5
syscall
move $a1, $v0
la $a0, msg2
li $v0, 4
syscall
addi $sp, $sp, -4
sw $ra, 0($sp)
jal Function1
lw $ra, 0($sp)
addi $sp, $sp, 4
move $a0, $v0
li $v0, 1
syscall
la $a0, space
li $v0, 4
syscall
jr $ra
Function1:
addi $sp, $sp, -4
sw $ra, 0($sp)
addi $sp, $sp, -4
sw $s0, 0($sp)
move $s0, $a1
li $t0, 3
ble $s0, $t0, Done
addi $a1, $s0, -1
jal Function1
mult $a1, $v0
mflo $t1
addi $a1, $s0, -2
jal Function1
add $t2, $t1, $v0
sub $v0, $t2, $s0
Done:
li $t0, 3
mult $t0, $a1
mflo $t1
addi $v0, $t1, -5
lw $s0, 0($sp)
addi $sp, $sp, 4
lw $ra, 0($sp)
addi $sp, $sp, 4
jr $ra