所以,我有一个打印nCr的函数。用户要求用户输入,我的函数灌输了获取nCr的递归函数:
int nCr(int n, int r){
if (r == 0 || r == n){
return 1;
} else {
return (nCr(n-1, r-1) + nCr(n-1, r));
}
}
这是我尝试将其转换为NASM时所执行的功能:
nCr:
mov ebp, esp
cmp word[ebp + 4], 0
je baseCase
mov ax, word[ebp + 6]
cmp word[ebp + 4], ax
je baseCase
cont:
dec ax
mov bx, word[ebp + 4]
dec bx
sub esp, 2
push ax
push bx
call nCr ;call nCr(n-1, r-1)
pop ax
mov ebp, esp
mov word[ebp + 8], ax
mov ax, 0
sub esp, 2
push ax
push word[ebp + 4]
call nCr ; call nCr(n-1, r)
pop ax
mov ebp, esp
add word[ebp + 8], ax
ret 4
baseCase:
mov word[ebp + 8], 1
ret 4
我用3和2测试了它,我收到了一个分段错误(核心转储)错误消息。在这段代码中是否需要做或改变(假设输入从ASCII字符转换为整数)?