概念
递归(英语:recursion)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。[2] 绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此有很多在函数编程语言(如Scheme)中用递归来取代循环的例子。
public void recursiveTest(){
recursiveTest(); //自己调用自己,就叫递归
}
在支持自调用的编程语言中,递归可以通过简单的函数调用来完成,如计算阶乘的程序在数学上可以定义为
递归的实现方式
递归和普通函数调用方式一样,是通过栈来实现的。
- 主程序main()函数入口地址和变量地址等压栈;
- 接着将外层递归函数的入口地址和产生的局部变量(临时变量)压栈存放;
- 依次类推直至递归运算结束;
- 末尾递归运算结束后,从栈顶依次取运算结果(临时变量)和函数地址,找回上层递归函数及其变量,直至回溯到main()函数中去;
- 完成了整个递归过程。
栈的原理及实现:https://blog.csdn.net/u010220089/article/details/49848175
递归的作用
汉诺塔问题
问题分析:
- 64个大小不等的盘子;
- 大盘子在下,小盘子在上;
- 将其全部按由小到大的顺序移动到C柱子上;
- B柱子用来做中转操作。
解题思路:
-
将大问题分解为小问题;
-
将A柱当前N个盘子除最大盘子以外的N-1个盘子按顺序放在B上;
-
然后将A上第N个最大盘子放在C上;
-
再将刚刚移动到B上的N-1个盘子移动到C上。
算法实现: