.globl fac2 fac2: li $t0, 1 # check for base case bgt $a0, $t0, recurse li $v0, 1 # if so, set return value jr $ra # and return recurse: move $t1, $a0 # save N addi $a0, $a0, -1 # calc N-1 for recursive call addi $sp, $sp, -4 # save return address on stack sw $ra, ($sp) jal fac2 # calc (N-1)! mul $v0, $v0, $t1 # multiply that by N lw $ra, ($sp) # restore return address addi $sp, $sp, 4 jr $ra # and return