如何在递归函数中避免分段错误?

时间:2016-11-24 07:48:33

标签: recursion nasm

所以,我有一个打印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字符转换为整数)?

0 个答案:

没有答案