![]() |
1
0
由于朴素的Fibonacci计算是递归的,因此需要存储数字。 不可能在第n个F(n)元素计算的中途,也不可能获得F(n-2)和F(n-1)元素,因为这些元素的计算将使用相同的CPU/寄存器,因此CPU的中间状态必须在F(n-2)/F(n-1)调用之前存储,并在调用之后恢复,以继续F(n)计算。 通常在这种情况下使用堆栈,但它是一个内存,用于存储中间结果。即使您只在CPU寄存器中保存数字,它仍然是值的存储。因此,我不确定任务描述中的真正约束是什么,可能是某种特定的数字存储方式被禁止,否则对我来说没有意义。
反转过程,如输出
让我们将序列定义为:F(n)=F(n-1)+F(n-2),F(1)=1,F(2)=1 算法可以是这样的:
尝试在头中验证算法看起来正常,并执行您想要的操作,然后将其写入ASM,检查CPU寄存器,如果您可以匹配这些中间值([
编辑:对于输入“1”,它将始终输出“1”,不可能输出“2”。其余的斐波那契数是唯一的。
edit2:关于“增量”,后来我意识到你在谈论MIPS,它类似于RISC(精简指令集计算),因此没有专门的+1
|
![]() |
2
0
55 34 21 13 8 5 3 2 1 1 0 |