搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
小小林熬夜学编程
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Pycharm一定要使用的5款插件,实用且酷炫!
2
[AIGC] 深入理解 Java 的 JSON 序列化和反序列化
3
valign深入理解
4
代码随想录训练营day14|LeetCode二叉树part1
5
基于python景区景点旅游购票售票系统设计与实现:开题报告、成品参考、毕设辅导资料_编写网购景区门票显示付款金额的python程序
6
UDP 设计实现_udp数据协议设计
7
anaconda3 快速在无法连接外网的服务器上安装需要的环境_服务器连不上网,应该怎么装环境
8
Linux离线安装NTP服务,无外网环境下配置本地时间同步_linux服务器时间校正 无网
9
安装、部署、配置Windows SharePoint Services 3.0:(1)安装准备
10
Mac访问Windows共享文件教程_smb://192.168.1.1
当前位置:
article
> 正文
什么是尾递归/尾递归的底层实现原理_所有递归都可以改写为尾递归吗
作者:小小林熬夜学编程 | 2024-02-19 18:25:32
赞
踩
所有递归都可以改写为尾递归吗
什么是尾递归/尾递归的底层实现原理
什么是尾递归?尾递归就是函数最后的语句是调用函数自身,但调用自己的时候,已经
不再需要上一个函数的环境了。所以并非所有的递归都属于尾递归,它需要通过上述的规则来编
写递归代码。和普通的递归相比,尾递归即使递归调用数万次,它的函数栈也仅为常数,不会出
现Stack Overflow异常。
递归和循环的区别?从jvm的角度来说,递归每增加一层,使用的栈内存都会增加一个栈帧,
也就是说递归是以消耗内存为代价来换取执行速度。循环占用的栈帧是固定的,不会随着循环次
数的增加而增加,但是执行速度会随着循环次数的增加而增加。
尾递归的优势?尾递归很好的融合了递归和循环的优点,尾递归既融合了递归速度快的优点,
又融合了循环占用内存小的特点。
尾递归占用的栈帧为什么不会随着递归深度的增加而增加呢?这就要搞清楚尾递归的实现原
理了。尾递归实际上是利用了计算机科学的尾调用,什么是尾调用呢?尾调用指的是一个函数最
后一个操作是函数调用。这句话需要好好回味,感兴趣的朋友可以百度一下,务必先搞清楚什么
是尾调用。好,回到尾递归上来,如果一个函数最后一个操作是调用函数本身,那么这就是尾递
归。
普通递归与尾递归的本质区别。尾递归在当前栈帧执行完之后,不需要再保留当前栈帧,而
是带着当前栈帧的结果,进入到下一栈帧。这里有兴趣的朋友可以研究一下栈帧的生命周期。普
通的递归则不同了,普通的递归由于当前栈帧还没有执行完,就要调用其他栈帧了,当前栈帧不
能退出,所以普通的递归占有的栈帧会随着递归层次的增加而增加。这就是普通递归和尾递归的
本质区别。
尾递归算法的价值。尾递归算法巧妙的运用了计算机的尾调用,充分利用了计算机硬件的设
计原理,能够使程序更高效的运行。但是并非所有的递归都可以改写成尾递归,所以实际使用时
还是要具体问题具体分析。在平时的开发工作中,尽量坚持这样一个原则:能用尾递归解决的问
题,坚决不要使用普通的递归。
文章最后解释一下普通递归和尾递归。尾递归其实是一种特殊的递归。本质上也是递归,
所以本文中的普通递归准确的表述应该是非尾递归的递归。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/116233
推荐阅读
article
使用
sklearn
中
的
神经网络
模块
MLPClassifier
处理分类问题_
使用
sklearn
的
m...
MLPClassifier
(多层感知器分类器) 一.首先简单
使用
sklearn
中
的
neural_network,实例1:...
赞
踩
article
uniapp
组件
封装-
下拉菜单
栏
_
uniapp
下拉菜单
...
如图效果
[详细]
-->
赞
踩
article
递归
函数
及
递归
优化
(尾
递归
)_
递归
调用
接口只有
最后
一个
...
一、定义 在函数内部,可以
调用
其他函数。如果
一个
函数在内部
调用
自身本身,这个函数就是
递归
函数
。二、利弊
递归
函数
的优...
赞
踩
article
graspnet
-
baseline
复现
问题
总结...
除此以外,由于我的显卡算力是8.6,pytorch版本有点低,编译时会出现nvcc fatal,需要在knn里的setu...
赞
踩
article
2
02
4-
02
-16
AIGC
-
数字
人
-
阿里巴巴
国际站-指定的
数字
人
平台
_北京网聚电商
数字
人
...
2
02
4-
02
-16
AIGC
-
数字
人
-
阿里巴巴
国际站-指定的
数字
人
平台
。_北京网聚电商
数字
人
北京网聚电商
数字
人
...
赞
踩
article
python
-
递归
函数
_
实例分析
_
尾
递归
_
递归
函数
python
例子...
递归
函数
1.
递归
函数
递归
函数
: 自己调用自己的函数就是
递归
递 : 去归 : 回一去一回就是
递归
栈帧空间 : 每次调用...
赞
踩
article
前端开发
--
箭头
函数
_前端
箭头
函数
...
但是上面的写法是错误的,因为这时大括号被解释为代码块,解决的办法是:在对象外面加上小括号,上面我们写的代码中,发现
函数
体...
赞
踩
article
# 学习记录1(C#-
解决
内存
泄漏
的几种方法)
_
c#
解决
内存
泄漏
...
这里写自定义目录标题 myImageCodecInfo = GetEncoderInfo("image/jpeg")...
赞
踩
article
【
前端
知识之JS】
尾
递归
的
理解
_
js
尾
递归
...
本系列主要整理
前端
面试中需要掌握
的
知识点。本节介绍对
尾
递归
的
理解,以及一些主要
的
应用例子
_
js
尾
递归
js
尾
递归
...
赞
踩
article
深度学习(自监督:
SimCLR
)——A
Simple
Framework
for
Contrasti...
文章目录前言
SimCLR
简述实验数据增强对性能的影响Unsupervised contrastive learning ...
赞
踩
article
递归
与伪
递归
区别
,
Python
实现
递归
与尾
递归
_
什么
是
伪
递归
...
递归
函数在函数内部
,
可以调用其他函数。如果一个函数在内部调用自身本身
,
这个函数就
是
递归
函数。(1)
递归
就
是
在过程或函数...
赞
踩
article
kitti
raw
中
IMU
时间戳问题_
kitti
imu
时间戳...
垂直变化的部分是
IMU
数据缺失,缺失有影响的话只能将后面的全部删除了吧?将图片放大后可以看到许多问题。数据集时,
IMU
报...
赞
踩
article
花期
内花
的
数目_
flower
[
i
]
表示
第
i
朵
鲜花
第
i
次需要查询第
i
dx朵
鲜花
和类型为
type
鲜花
之间...
题目给你一个下标从 0 开始
的
二维整数数组
flower
s ,其中
flower
s[
i
] = [start
i
, end
i
...
赞
踩
article
Linux ❉
SSH
服务器_
there
was
1
failed
login
attempt
...
一 介绍
SSH
- Secure Shell 安全外壳协议:
SSH
为建立在应用层基础上的安全协议。
SSH
是较可靠,专...
赞
踩
article
pygame
开发
(二)
—
—
pgzero
库
开发
...
pygame
zero入门_
pgzero
pgzero
pygame
库
开发
较麻烦,所以先从pyg...
赞
踩
article
优质
可视化
素材
大放送
,
全部
免费
,
承包你今年的
大屏
项目_
免费
大屏
效果...
做
大屏
的时候
,
是不是经常遇到没有
素材
用的情况
,
也不知道从哪里可以下载到
免费
又酷炫的
素材
!帆软君这就给你准备好了!还记得我...
赞
踩
article
Vue
项目
结合
Turn
.
js
制作
翻页
动画,
项目
部署发布,从零到1...
Vue
项目
结合
Turn
.
js
制作
翻页
动画,
项目
部署发布,从零到11. 书籍
翻页
项目
-
翻页
动画,页码跳转2. 语言 v...
赞
踩
article
AI
绘画攻略:
Midjourney
一键
生成
IP形象及
三视图
_
midijourney
生成
立体ip...
Midjourney
作为设计师的得力助手,不仅能完成平面设计、UI设计等基础任务,还能快速
生成
IP 形象和,一分钟就能...
赞
踩
article
19
.
Oracle11g
中的
游标
...
在Oracle 11g中,
游标
是一种用于在PL/SQL程序中处理查询结果集的数据结构。它允许程序员在程序中对查询结果集进...
赞
踩
article
必备
Vue
.
js
组件
库
和
图表
库
汇总推荐_
vue
图表
组件
...
必备
Vue
.
js
组件
库
和
图表
库
汇总推荐_
vue
图表
组件
vue
图表
组件
部分数据来源:ChatGP...
赞
踩
相关标签
神经网络
多层感知器
人工智能
fit
partialfit
javascript
前端
css
ubuntu
机器学习
python
AIGC
数字人平台
开发语言
c#
学习
面试
递归
递归算法
自动驾驶
二分查找
前缀和
差分数组
哈希表