You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MIPS汇编实现组合数n choose k代码异常求助:输入2和3输出4

MIPS汇编组合数代码错误排查与修复

你的代码存在两个关键错误,导致输入n=2、k=3时输出错误结果:

错误1:n < k时未返回0

组合数定义中,当n < k时结果为0,但你的代码在判断n < k后直接跳转到choose_end,未对返回寄存器$v0赋值。此时$v0保留的是之前操作的残留值(比如输入k=3时的syscall返回值或栈中随机值),这就是输出4的原因。

错误2:计算C(n-1, k)时参数错误

调用完C(n-1, k-1)后,你仅将$a0加1恢复为n-1,但$a1仍保持为k-1(递归调用C(n-1,k-1)时修改后的值),实际应该恢复为原始的k值,否则会错误调用C(n-1, k-1)而非C(n-1, k),导致递归计算完全偏离预期。


修正后的代码:

.text
        addi    $v0, $zero, 5
        syscall
        add $a0, $v0, $zero  
    
        addi    $v0, $zero, 5
        syscall
        add $a1, $v0, $zero  #call choose function
        jal choose

        add $a0, $v0, $zero  #print result
        addi    $v0, $zero, 1
        syscall

        addi    $v0, $zero, 10   #exit program
        syscall

choose:
        addi    $sp, $sp, -16    
        sw  $ra, 0($sp)        # save the return address on the stack
        sw  $s0, 4($sp)        # save s0 on the stack
        sw  $a0, 8($sp)        # save n on the stack
        sw  $a1, 12($sp)       # save k on the stack

        slt     $t0, $a0, $a1     # check if n < k
        beq     $t0, $1, choose_zero
        beq     $a0, $0, choose_one   # check if n == 0 or k == 0
        beq     $a1, $0, choose_one

        addi    $a0, $a0, -1     # calculate choose(n-1, k-1)
        addi    $a1, $a1, -1
        jal     choose
        move    $s0, $v0

        # 恢复原始n和k,计算choose(n-1, k)
        lw  $a0, 8($sp)
        lw  $a1, 12($sp)
        addi    $a0, $a0, -1
        jal     choose
        add     $v0, $s0, $v0     # add val1 and val2

        j   choose_end

choose_one:
        li  $v0, 1             # return 1
        j   choose_end

choose_zero:
        li  $v0, 0             # return 0 when n < k
        j   choose_end

choose_end:
        lw  $ra, 0($sp)        # restore the return address
        lw  $s0, 4($sp)        # restore s0
        addi    $sp, $sp, 16     # deallocate space from stack
        jr  $ra                # return to caller

内容的提问来源于stack exchange,提问作者narutobaco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 07:07:49