我试着用MIPS语言做了几天的代码,没有任何好的结果,我不知道该怎么做!!你能帮帮我吗?谢谢“
int function1(int n){
if (n <= 2)
return -15;
else{
int comp = 6*function1(n-1) + (-2)*function1(n-2) + 3*n;
return comp;
}
}发布于 2015-03-06 13:26:03
这个方法很简单。它是修正的Fibonacci函数,其中系数与每个递归调用相加。守则如下:
.text
#recursive recurent function. similar as fibonacci, with smaller modifications
RecurentFunction:
sub $sp, $sp, 12 #allocate 12B on stack
sw $ra, 0($sp) #save return address
sw $a0, 4($sp) #save argument
ble $a0, 2, exit_recurentfunction #if argumrnt is <= 2 go to exit and return -15
sub $a0, $a0, 1 #set n = n - 1
jal RecurentFunction #recursive call
mulo $v0, $v0, 6 #multiply result with 6, as requested: 6*function1(n-1)
sw $v0, 8($sp) #save result
lw $a0, 4($sp) #load argument, as it's overwrittent by previous calls
sub $a0, $a0, 2 #set n = n - 2
jal RecurentFunction #recursive call
mulo $v0, $v0, -2 #multiply result with -2, as requested: (-2)*function1(n-2)
lw $t0, 8($sp) #load previous result
add $v0, $v0, $t0 #add previous result to current result
lw $t0, 4($sp) #load argument, as it's overwrittent by previous calls
mulo $t0, $t0, 3 #multiply by 3, as requested: 3*n
add $v0, $v0, $t0 #add to result
lw $ra, 0($sp) #load return address
addi $sp, $sp, 12 #free stack
jr $ra #return
exit_recurentfunction:
li $v0, 15
lw $ra, 0($sp) #load return address
addi $sp, $sp, 12 #free stack
jr $ra #return
main:
li $a0, 4 #set $a0 = 54, argument for function call
jal RecurentFunction #call RecurentFunction
move $a0, $v0 #move result to $a0
li $v0, 1 #set $v0 = 1, system call for print int
syscall
li $v0, 10 #set $v0 = 10, system call for exit program
syscall
.data希望它能帮上忙
https://stackoverflow.com/questions/21872119
复制相似问题