递归调用打印问题
/*
递归能够解决什么样的问题呢
阶乘 8皇后 魔攻问题 最短路径问题
举个例子 球和篮子
如果是两个球放到两个篮子里面
就是3种结果(1 1)(2 0)(0 2)
像快速排序 二分查找 归并排序等算法都需要用到递归
递归需要遵循的重要规则
方法区内存是独立的,不受外部影响
如果递归的是引用数据类型,那么引用指向的数据将会被共享
如果无限递归,则会出现栈溢出异常java,lang.StackOverflowError
所以需要向递归的条件边界趋近
*/
public static void main(String[] args) {
test(6);
}
private static void test(int i) {
if (i > 1){
test(i - 1);
}
System.out.print(i + " "); // 1 2 3 4 5 6
}
/*
打印规则递归调用规则
使用栈模拟递归调用
方法栈帧首先指向main
每调用依次方法
都会在栈帧上方开辟新的空间
一直开辟到test(1)
此时栈帧指向test(1)
然后开始在栈顶调用System.out.print方法
因为每一个方法都会等内部的方法执行结束后再去执行下一行代码
直到main方法上面的栈帧执行完毕
main方法栈帧指向的test方法才算执行完毕
接着就可以执行test方法的下一个方法了
*/
迷宫问题递归实现
/**
* class maze
*
* @author 404 little dinosaur
*/
class Maze{
/*
需求:
小球从初始值[1][1]开始出发
寻找出口[6][5]
找到最短路径
小球走过的路用2表示
并输出每次小球走过的坐标
返回能否到达出口
*/
public static void main(String[] args) {
/*
二维数组模拟迷宫
*/
int[][] maze = new int[8][7