尾调用与尾递归
递归 调用
2023-09-11 14:18:08 时间
一、尾调用
尾调用是指函数的返回值为纯函数调用的情况,即函数最终的返回值与它返回的调用函数的返回值完全一致,这也要求函数最后一句话是返回调用某个函数值,且该函数调用不出现在表达式中。
现代编译器一般都支持尾调用优化,编译器执行到最后一条语句再调用函数时不用保存当前函数的栈信息,加快程序的执行效率。
二、尾递归
尾调用函数最后调用的是它自身,特殊的尾调用。对编译器优化很敏感,列子如下:
//普通线性递归写法
function fib(n){ if(n<=2){ return 1; } return fib(n-1)+fib(n-2); } console.log(fib(3)) console.log(fib(50))
//尾递归的写法,此时当递归层级深时执行速度比上面的快很多 function fibtail(n,acc1,acc2){ if(n<2){ return acc1; } //console.log(); return fibtail(n-1,acc2,acc1+acc2); } console.log(fibtail(3,1,1)) console.log(fibtail(50,1,1))
相关文章
- 暴力递归:将栈逆序,不要使用额外空间
- java递归构建菜单树
- linux下递归删除指定后缀名的文件
- 【C++】二叉树之力扣经典题目1——详解二叉树的递归遍历,二叉树的层次遍历
- 程序算法艺术与实践:递归策略基本的思想
- 浅谈JS递归
- DFS | 从根到叶的二进制数之和【附递归展开图】
- LeetCode之024两两交换链表中的节点(相关话题:链表递归迭代)
- 9.9递归和动态规划(七)——实现很多图片编辑软件都支持的“填充颜色”功能
- HDU 2842 Chinese Rings(矩阵高速功率+递归)
- sql server递归日期
- leetcode 344. 反转字符串 递归写法
- python第三十一课--递归(1.简单递归函数的定义和使用)
- 经典递归回溯问题之——解数独(LeetCode 37)