消除尾递归
来源:互联网 发布:淘宝运营工资怎么样 编辑:程序博客网 时间:2024/05/22 05:14
尾递归
函数调用自身,称为递归。如果尾调用自身,就称为尾递归。
递归非常耗费内存,因为需要同时保存成千上百个调用帧,很容易发生“栈溢出”错误(stack overflow)。但对于尾递归来说,由于只存在一个调用帧,所以永远不会发生“栈溢出”错误。
对比
package mainimport ( "fmt")// 存在尾递归func fibonacci(n int) int { if n <= 1 { return 1 }else { return fibonacci(n - 1) + fibonacci(n - 2) }}// 消除尾递归func fibonacci2(n int, args [2]int) int { if n <= 1 { return args[1] }else { args[0], args[1] = args[1], args[0] + args[1] return fibonacci2(n-1, args) }}func main() { // 计算时间过长 //fmt.Println(fibonacci(1000)) // 很快算出来 args := [2]int{1, 1,} fmt.Println(fibonacci2(1000, args)) }
阅读全文
0 0
- 尾递归消除
- 尾递归消除
- 消除尾递归
- 关于尾递归调用消除
- 尾递归结构的消除
- 非尾递归结构的消除
- 消除左递归文法
- 消除尾部递归
- 文件遍历,递归消除
- 消除左递归文法
- 消除左递归
- 二义性 消除左递归
- 消除左递归
- 如何消除左递归
- 消除文法的左递归
- 消除文法的左递归
- 编译原理 消除左递归
- 编译原理 消除左递归
- Android代码规范
- Maven语法
- Android Studio使用Opencv实现图像的实时处理
- 算法期末作业 NP问题证明
- git创建分支以及远程下载提交项目
- 消除尾递归
- 数组与矩阵
- 高斯牛顿(Gauss Newton)、列文伯格-马夸尔特(Levenberg-Marquardt)最优化算法与VSLAM
- android监听usb的插入与拔出
- 渐变色圆形流量球,渐变色圆形进度条
- mysql创建用户及权限管理
- xib自定义单元格的高度
- js排序
- stm32 基于TIM1定时器的PWM输出