Here is the code we wrote today:

	addi	$a0, $zero, 4
	jal	fact
	
	add	$a0, $zero, $v0		#print return value
	addi	$v0, $zero, 1
	syscall
	
	addi	$v0, $zero, 10		#exit system call
	syscall

fact:	#int fact(int n)	#n is a0
	addi	$sp, $sp, -8
	sw	$ra, ($sp)
	sw	$s0, 4($sp)

	addi	$t0, $zero, 2	#if(n < 2)
	bge	$a0, $t0, body
	
	li	$v0, 1		#  return 1;
	b 	return
	
body:	add	$s0, $a0, $zero
	addi	$a0, $a0, -1	#int val = n * fact(n-1);
	jal	fact
	mulo	$v0, $s0, $v0
	#return val;  previous instruction already puts it into $v0

return:	lw	$ra, ($sp)
	lw	$s0, 4($sp)
	addi	$sp, $sp, 8
	jr	$ra