递归式与递归

作者:disappearedgod
时间:2014-5-13

前言

如果你想迅速复习算法来应付考试或者是面试的话,请看本人的其他博客。递归,尽管简单,却并不是良药。况且,在很多大公司看来,递归是一种非常麻烦并且耗时耗力的算法。诚然,从简单的计算角度来说,递归就是这样的。但是,如果你换一个角度来看看计算机的世界,递归却是不能被忽略的。如果你是一个有着人类智慧的正常人,而非一个为了工作变态的机器人的话,递归无疑是你思考中必不可少的元素。

正文

1. 那些年你曾经追过的递归

从高中起,我们就学过递归函数。还记不记得那些年你舍不得解开的归纳法?
无独有偶,《算大导论》一上来就给出了我们递归式的算法分析。难道是中美之间意识形态的第一次握手么?
说实话,我们应该这么看待这个问题。
计算机就是用来辅助人类思考的机器。现在一直流传着这样的话,我们有时候向前走的太远于是就忘了原点在哪里。计算机的初衷和他的成功点不同,是为了破译密码或者简易计算。所有算法中,递归是最符合这一个原始定义的。当然,在时空所限的今天,我们无法将我们的思想完完全全的融入这个小机器里面,所以我们想了很多方法来将节省。但是,对于时空的分析,递归又恰巧是最能说明问题的。
递归的前提,我认为是,世界都是可以二分的。倘若不能复用,就没有函数的意义。我们看待问题总是尽量的去归纳,总结,从而节省了时间。

2. 递归法
我们把一些想法变成可重复执行的函数和不可重复执行的过程。一个直观的想法就是用递归的方法来进行函数的方法探究。当我们选择递归时候,需要考虑两个问题:一个是要找到递归函数式,另一个是要找到递归边界。对于后面这个问题,给出了如下三个方法。
  • 代换法。我们先猜有某个界存在。然后在用数学归纳法证明该猜测的正确性。
  • 对会输方法。将递归式转化成树形结构。
  • 主方法。给出递归式:T(n)=aT(n/b)+f(n)

2.1 代换法(substitution method)
代换法需要两个步骤
  • 猜测解的形式
  • 用数学归纳法找出使解真正有效的常数。
Tis: 
  • 对于特殊边界条件证明来说,有时候不必要考虑T(1) = 1的条件。只需要n>=n0时,证明T(n)<=cnlgn,其中n0是常数。
  • 通常的方法不能用来猜测递归式。我们可以用递归树的方法来辅助猜测。
2.2 递归树法(recursive tree)

2.3 主方法(master method)















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值