递归斐波那契Recursive Fibonacci转ARM汇编运行结果错误求助
以下是递归斐波那契转ARM汇编时,出现结果偏大、执行次数异常的常见排查点,你可以对照你的代码逐一核对:
- 首先核对递归终止条件是否和参考实现一致:通用的递归斐波那契边界规则为
n=0返回0、n=1返回1,部分简化实现为n<=2返回1,重点检查分支跳转指令的条件是否写反,比如把大于跳转bgt写成大于等于跳转bge,很容易导致多执行一轮计算。 - 检查栈帧操作的匹配度:ARM进行递归调用时,入栈的寄存器(包括lr链接寄存器、传参用的r0~r3、存储中间结果的自定义通用寄存器),出栈的顺序、数量必须和入栈完全对应,栈帧操作不匹配会导致返回地址错误,跳转到错误的代码段重复执行计算。
- 核对递归调用的参数传递是否正确:调用
fib(n-1)和fib(n-2)前,确认传递给子函数的参数值计算正确,比如有没有误把n-1写成n,导致递归深度多了一层。 - 检查结果累加逻辑:两次递归调用返回值相加时,有没有错误设置了累加初始值,比如把sum初始值设为1而非0,会导致最终结果多出固定数值。
内容的提问来源于stack exchange,提问作者Diana
相关产品推荐
相关产品推荐

