Recursion x8086程序集中的接收进程
我试图得到的序列的明确定义是1*2+2*3+3*4…+i(i+1)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:我想这是一个家庭作业。是的,这个作业需要递归。他给出了一个交互表达式,让我们找到它的递归定义。 ;=========
我已经把数学计算下来了,我发现这个级数的递归定义是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
;============================================================================