我对这种类型的“编程”相当新,所以在创建程序时遇到了一些问题。我正在尝试创建的程序接受两个整数,n和r。如果n等于r,OR r等于0,则输出值为1.否则,它将实现f(n-1,r)+ f(n-1,r-1)函数。
这是我的代码:
.data 0x1001000C
x: .word 4
y: .word 2
.text
main:
sub $t3, $t3, $t3
sub $t4, $t4, $t4
lui $t0, 0x1001
lw $t1, 0($t0) #this is your initial n
lw $t2, 4($t0) #this is your initial r
addi $a0, $t1, 0
addi $a1, $t2, 0
jal form_base
addi $t3, $v0, 0
sw $t3, 0($t0)
j main_exit
main_exit:
li $v0, 10
syscall
form_base: #this part checks the (n==r || r==0) OR otherwise
beq $a0,$a1, IF
bne $a1, $zero, form_recurse
IF:
addi $t4, $t4, 1
addi $v0, $t4, 0
jr $ra
form_recurse:
subu $sp, $sp, 20
sw $ra, 4($sp)
sw $a0, 8($sp)
sw $a1, 12($sp)
addi $a0, $a0, -1 #this is the n-1 part
addi $a1, $a1, 0 #this is the r part
jal form_base
sw $v0, 0($sp)
addi $a0, $a0, -1 #this is the n-1 part
addi $a1, $a1, -1 #this is the r-1 part
jal form_base
lw $t0, 0($sp)
add $v0,$t0,$v0 #final value of function
lw $ra, 4($sp)
lw $a0, 8($sp)
lw $a1, 12($sp)
addu $sp, $sp, 20
jr $ra
GIVEN: n始终大于或等于r
问题:对于4和2,答案应该是6.但是,这个程序输出1代替,这意味着它在f(n-1,r)函数之后终止而没有进入f(n-1,r-1)函数等。
我该怎么做才能解决这个问题?有帮助吗?谢谢!