【发布时间】:2016-01-21 07:12:29
【问题描述】:
我是汇编语言的初学者。我正在使用窗户。我在这里尝试使用第二个答案中的代码:Recursive Fibonacci in Assembly 给我第n个斐波那契数
Fibonacci: ; computes Fib(EAX) --> EAX; do not call with EAX==0
CMP EAX, 1 ; N<=1?
JBE exit ; yes, we have the answer
DEC EAX ; = N-1
PUSH EAX ; save N-1
CALL Fibonacci ; computing FIB(n-1)to EAX
XCHG EAX,0[ESP] ; swap FIB(n-1) for saved N-1
DEC EAX ; = N-2
CALL Fibonacci ; computing FIB(N-2) to EAX
POP ECX ; = FIB(N-1)
ADD EAX,ECX ; = FIB(N-1)+FIB(N-2)
exit:
RET
该部分有效,但我无法打印序列 F(0) 到 F(10)
mov ecx,10
mov ebx,0
print_fib:
mov eax,ebx
call fibonacci
call print_int
inc ebx
loop print_fib
【问题讨论】:
-
既然您已经在考虑斐波那契数列,您可能会发现stackoverflow.com/questions/32659715/… 很有趣。那是关于一个循环的非递归实现(因为在 O(Fib(n)) 时间内计算 Fib(n) 是愚蠢的,因为你可以在 O(n) 时间内轻松计算它,甚至 O(log(n)) 时间如果你想变得更复杂)。编写一个有效的递归函数作为练习很有用,但我希望人们能选择一个递归实现实际上使事情变得更简单的例子。