[原]关于线性递归与尾递归

news/2025/2/26 9:15:21

作为读书笔记使用:

线性递归:

1 fac(0) -> 1;
2 fac(N) -> N*fac(N-1).

尾递归:

1 fac(0,Sum) -> 
2      Sum;
3 fac(N,Sum) -> 
4      fac(N-1,Sum*N).

尾递归定义:

  函数最后一步调用自身,即最后一行代码一定是对于自己的一个递归调用。

Erlang尾递归这样带来的好处是可以让编译器做到将递归优化,转化为跳转指令而不是,可以防止栈空间爆炸。

 

尾递归通常的做法是将中间状态加入到参数中,还可以防止共享变量的问题。这也是传说中的中间状态

python中对于尾递归的优化我还不得而知,Erlang对于线性递归做到了一定的优化,GCC也可以。

想去买一本《递归可枚举度与图灵度》

转载于:https://www.cnblogs.com/Bozh/archive/2012/06/13/2548358.html


http://www.niftyadmin.cn/n/673076.html

相关文章

金岭矿业:增发收购集团矿产 买入

2007-9-11 13:09:00 代码:000655 作者:杨宝峰 来源: 东方证券 出处: 顶点财经加入收藏复制链接给好友跳到低部事件:金岭铁矿今日公告,公司计划向包括大股东在内的特定投资者定向增发不超过5000万股,收购集团公司召口铁矿和其他资产。 基本结…

Ruby on Rails,创建和执行migrations迁移文件

在《Ruby on Rails,rake工具使用和数据库migrations迁移的概念》中,我们知道Rails中进行数据库迁移操作的基本概念和重要性。现在着手进行一个简单的数据库迁移实践吧。 所有的数据库迁移文件存放在simple_cms/db/migrations目录中,在之前我们…

题材丰富 医药板块初露峥嵘

2007-9-12 10:34:00 代码:000078 作者:胡文毅 来源: 三元顾问 出处: 顶点财经加入收藏复制链接给好友跳到低部从国家食品药品监督管理局获悉,我国已成为世界上最大的疫苗生产国,疫苗年产量超过10亿个剂量单位。二级市场上,医药板块初露峥嵘…

mysql数据迁移hbase问题

无法直接dump,写了java多线程程序做迁移 问题1:Operation not allowed after ResultSet closed 裸jdbc语句,一个线程跑7个表,只有第一个表时候出这个问题,方法改为static synchronized可以解决,但速度慢的不…

HN新记录,BT视频:3D김동원—城镇高速公路L3—1分46秒

恩&#xff0c;有我的风范啊<embed src"http://player.youku.com/player.php/sid/XODM4MjUxNg/v.swf" quality"high" width"450" height"372" align"middle" allowScriptAccess"sameDomain" type"applica…

dpkg命令的使用

dpkg命令的使用&#xff1a;dpkg -l 查看当前系统中已经安装的软件包的信息dpkg -L &#xff08;软件包名称&#xff09;查看系统中已经安装的软件文件的详细列表dpkg -s 查看已经安装的指定软件包的详细信息dpkg -S 查看系统中的某个文件属于那个软件包;dpkg -i *.deb文件的安…

东方证券:中国A股风险渐渐正在临近

2007-9-12 15:47:00 代码:作者:邓宏光 来源: 东方证券 出处: 顶点财经加入收藏复制链接给好友跳到低部9月11日&#xff0c;本来高开高走的沪深两市午后风云突变&#xff0c;尾盘大幅跳水&#xff0c;跌幅分别达到4.51%和4.4%。我们认为&#xff0c;本次下跌&#xff0c;既不是…

wince/WinForm下实现一个自动关闭的MessageBox

WinForm 下我们可以调用MessageBox.Show 来显示一个消息对话框&#xff0c;提示用户确认等操作。在有些应用中我们需要通过程序来自动关闭这个消息对话框而不是由用户点击确认按钮来关闭。然而.Net framework 没有为我们提供自动关闭MessageBox 的方法&#xff0c;要实现这个功…