递归的定义和应用条件
递归就是程序调用自身的编程技巧;
把大型复杂的问题转化为一个与原问题相似规模较小的问题来进行求解;
递归每次调用传入的是不同的变量
递归不是算法,是调用自己的过程
调用的那个是一个小问题,自己是一个大问题:子问题必须与原始问题为同样的事,且更为简单;
这个小问题是这个大问题的一个子集;
缺点:运行效率较低
因此在算法中,递归解决问题通常名为暴力搜索;
递归思想的内涵
递的意思就是往下走,归的意思就是往回走;
写函数,结尾的目的是让整个函数调用的过程能够归回去;
开始是指你什么时候开始递,结尾是指你什么时候开始归;
数学归纳法理解递归
数学归纳法适用于将解决的原问题转化为解决他的子问题。
两套递归模版
end处是递归终止时的处理方法;
递归模版直接套用即可;
递归和循环的区别
递归最能按照自己的思维走,循环和递归都是重复任务的过程;
递归常常带来性能的问题;
递归转换成循环:建立堆栈;
递归应用场景和调用机制 递归的两个小案例-打印和阶乘问题
Java--栈空间 堆空间 代码区
当进入main方法,先在栈中开辟一段空间;从底层来讲,这个过程叫做编译,在这个过程中,就会调用test,会立即开辟一个新栈;
以上代码输出的结果是2 3
public class test1 {public static void main(String[] args) {test(4);}public static void test(int n){if(n>2){test(n-1);}System.out.println("n="+n);}}
当有else的时候,只会输出n=2
因为当进入if的时候就不会进入else
对于阶乘问题:
这里就是去求n的阶乘:输入n的值:
递归调用机制图
递归调用规则:
当程序执行到一个方法时,就会开辟一个新的空间叫做栈;
递归能解决的问题和规则
递归的底层就是用栈 独立的空间--栈空间