目录
-
一部电影 - 《土拨鼠之日》
递归剧情的电影:男主Phil陷入时空错乱中,开启了他怀疑人生的一天,每天醒来生活中都会出现相同的人,发生同样的事情,每天起床都有同样的电台广播,有个人会和他搭讪,老太太会和他聊天询问他早餐和天气,路上遇见乞丐和卖保险的旧朋友,报导节目等等,无论他如何选择度过这一天,他都始终无法再前进一步,直到女主Rita被他打动并且共度良宵后,才停止了这永远重复的一天。类似的电影还有《恐怖游轮》
-
递归和循环
我们可以将这部电影的拍摄手法称之为递归拍摄手法,递归的本质也是一种循环,重复的自己调用自己,和死循环不一样,递归会有条件的变化,直到条件变化到特定的时候,递归结束,而电影中的结束条件就是男主撩到女主收获爱情。递归操作不当就容易引起死循环,比如电影中的男主如果是个gay里gay气的人,对女人根本不感兴趣,那么可能他就永远活在土拨鼠之日中了。
-
递归三要素
- 每次递归变量必须要有变化,递归的规模要减少
- 必须要有终止的边界条件,否则将陷入死循环
- 提炼相同的操作逻辑,前一次的输出就是后一次的输入
-
一个栗子:求1-n的总和
public class ExampleUnitTest {
@Test
public void recursiveSumTest() {
int i = recursiveSum(100);//求1-100的总和
System.out.println("1-100的总和为:"+ i);
}
/**
* 利用阶乘求1-n的总和
* @param n
* @return
*/
public int recursiveSum(int n) {
if (n == 1){
return 1;
}
return n + recursiveSum(n -1);
}
}
运行结果:1-100的总和为:5050
运行轨迹:
-
小结
- 递归必须要一个回归的出口,要不然将陷入死循环
- 深层次的递归将频繁进出栈分配内存空间,运行效率较低,当层次较深时不推荐使用递归