所以我正在用MIPS写一个计算器,我正在尝试编写一个n选择k函数。 我想要使用的算法是:
如果我想做5选择3那么我将有一个循环(5 * 4 * 3)/(3 * 2 * 1)。假设我已经有乘法和除法函数,我将如何在MIPS中实现它?
现在我有这个,但它根本不起作用:
calnchoosek:
move $t1, $a0
move $t2, $a2
move $t3, $a0 # copies for the counter
move $t4, $a2
loop_top:
beq $t3, $t4, loop_bottom
subi $t3, $t3, 1
move $a0, $t1
move $a2, $t3
jal multi
move $t1, $v0
j loop_top
loop_bottom:
beq $t4, $zero, exit1
subi $t4, $t4, 1
move $a0, $t2
move $a2, $t4
jal multi
move $t2, $v0
j loop_bottom
exit1:
move $a0, $t1
move $a2, $t2
jal divi
我认为我的逻辑是完全有缺陷的,我可能要重新开始。有谁可以帮助我?
答案 0 :(得分:3)
在loop_bottom
中,$t4
将在上一次迭代中设置为0。将$t2
乘以零,得分为零。 divi
正在计算K *(N!-K!)/ 0 - 你除以零!