{
if (n) return fac(n-1)*n
return 1
}void main()
{
printf("%d\n", fac(6)) // 数字随你改,也可以通过键盘输入。
}
杨辉三角只是引导你推导或回忆起C(n,k)=C(n-1,k)+C(n-1,k-1)。然后利用它构建递归组合函数。并未要求输出杨辉三角,难道是输出范例中有要求?
程序需满足:
1,类型为x86
2,输入为键盘输入的2个64位无符号整数,忽略数字以外的其他字符
3,输出为标准输出
4,参数传递方式为栈传值
5,返回值存于rax
6,其他:
检查并报告溢出错误
所有数字,中间值及结果都是64位
Comb:
push rbp
mov rbp, rsp
push rbx
push rdx
mov rax, [rbp+16]
mov rbx, [rbp+24]
cmp rax, rbx
jg pError 无符号转移
je stopcond
Test rax, rax
je stopcond
mov rdx, rax
dec rbx
dec rax
push rbx
push rax
call Comb
push rbx
push rdx
mov rdx,rax
call Comb
add rax, rdx
jmp exit
stopcond:
mov rax, 1
jmp exit
pError:
xor rax,rax
jmp exit
exit:
pop rdx
pop rbx
mov rsp, rbp
pop rbp
ret
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)