【发布时间】:2019-04-23 18:31:25
【问题描述】:
我很难让递归工作。好吧,递归 n!阶乘计算器并不难,花了我大约半天的时间。
mov eax, [input]
call factorialator
jmp quit
;
factorialator:
cmp eax, 0
je return
push eax
dec eax
call factorialator
;
pop eax
imul ebx, eax
ret
;
return:
mov ebx, 1
ret
现在,该函数以 n = n-1 调用自身,并每次将 n 推入直到 n = 0,然后将它们全部相乘。 简单易懂
但是现在,我必须使用 (n-1) AND (n-2) 调用函数,我无法想象这将如何工作,因为我必须管理返回地址、堆栈和值。我所知道的,每次当它减去 1 或 2 并且结果为 1 时,它应该包含一个计数器,然后它会给我们结果。
所以返回 n-1 直到 n-1 = 1,在这种情况下返回 n-2,然后再次返回 n-1。我只是如此感到困惑,并且已经为此苦苦挣扎了 2 天。
感谢您的帮助,谢谢!
【问题讨论】:
-
首先用高级语言(或伪代码)编写代码,使用临时命名变量。这样你在 asm 版本中需要做什么会更清楚。
标签: recursion assembly x86 nasm fibonacci