Recursion x8086程序集中的接收进程

Recursion x8086程序集中的接收进程,recursion,assembly,sum,series,cdecl,Recursion,Assembly,Sum,Series,Cdecl,我试图得到的序列的明确定义是1*2+2*3+3*4…+i(i+1) 我已经把数学计算下来了,我发现这个级数的递归定义是a_n=a_(n-1)+2(n-1),a_1=0作为基本情况。我试图弄明白为什么这段代码一直给我偶数序列:{2,4,6,8,10…}而不是我试图计算的序列如果不需要递归(例如bTree或其他),为什么要使用它?这很容易用一个iteration@Tommylee2k:我想这是一个家庭作业。是的,这个作业需要递归。他给出了一个交互表达式,让我们找到它的递归定义。 ;=========

我试图得到的序列的明确定义是1*2+2*3+3*4…+i(i+1)


我已经把数学计算下来了,我发现这个级数的递归定义是a_n=a_(n-1)+2(n-1),a_1=0作为基本情况。我试图弄明白为什么这段代码一直给我偶数序列:{2,4,6,8,10…}而不是我试图计算的序列

如果不需要递归(例如bTree或其他),为什么要使用它?这很容易用一个iteration@Tommylee2k:我想这是一个家庭作业。是的,这个作业需要递归。他给出了一个交互表达式,让我们找到它的递归定义。
;==============================================================================================
    ; recursive procedure:
    ; supersum(int x)
    ; returns 1*2 + 2*3 + 3*4 + ... + i*(i+1)

supersum PROC
    push ebp ; start of every procedure
    mov ebp, esp
    push ebx

    ; Actual subproc calc here
    mov eax, [ebp +8] ; returning eax to the original called value  
    cmp eax,1
    je basecase


    dec eax ; (n-1) ; its just a lie...
    mov recnum, eax  ; saving dec val for call
    mul double ; 2(n-1)
    mov rhs, eax ; the right hand side is finished

    push recnum
    call sumseries ; a_(n-1)
    add esp, 4

definition:
    add eax, rhs ; a_(n-1)+ 2(n-1)

    jmp skp
basecase:             ; a_1 = 0
        mov eax, 0
        mov rhs, 2
        jmp definition
skp:    
        pop ebx
        pop ebp
        ret
supersum ENDP
;============================================================================