尾递归的跳转问题

来源:7-19 尾递归的优化

weixin_慕勒8023578

2022-02-27

jne Fib2+11h(0AA1520h)

这个地址 0AA1520h 是这样的

0AA1520h cmp ecx,1
0AA1523h je,Fib2+27h(0AA1536h)

尾递归调用的时候跳转到函数顶部,应该先判断是否等于0呀,怎么直接就判断是否等于1了?

写回答

2回答

易萧

2022-08-10

这个是编译器对代码逻辑进行优化了,因为第一次进函数时,这个值如果是小于等于1的,那就不会走到尾调用这一步,否则初值必大于2,此时再进行尾调用时,这个值发生递减,当这个值等于1时就已经是递归出口了,它永远都不会走到判0的时候,所以也就没有必要判断是否等于0了。

0
0

quickzhao

2022-02-27

同学,请问问题详细描述清你问题的上下文和C++源码,不要直接放一段汇编代码,谢谢

0
3
quickzhao
回复
weixin_慕勒8023578
编译器生成的汇编有可能会优化部分不需要的代码。
2022-03-02
共3条回复

重学C++ ,重构你的C++知识体系

一部大片,一段历史,构建C++知识框架的同时重塑你的编程思维

3884 学习 · 1103 问题

查看课程