故名思议自己调用自己,我们从简单到复杂、
/** * 递归 */ public static void myI(int n) { if (n < 0) { return; } else { myI(n - 1); System.out.println(n); } }
这个是最简单的递归
2,复杂点的就是阶乘 1,1,2,3,5,8,13想这样的
/** * 递归调用阶乘 1+1+2+3+5+8 */ public int FibonacciSequence(int n){ if(n==1 || n==2){ return 1; }else{ int i=FibonacciSequence(n-1)+FibonacciSequence(n-2); System.out.println(i+"数字"); return FibonacciSequence(n-1)+FibonacciSequence(n-2); } }
一个正序列,一个反序,为什会出入俩遍一开始我没有懂后来我懂了,是压栈了,
3,加大点难度的汉诺塔问题
/** * * @param n 盘子的个数 * @param start 开始的柱子 * @param middle 中介柱子 * @param end 结果的柱子 */ //5 1 2 3 public static void hanoi(int n,int start,int middle,int end){ if(n<=1){ System.out.println(start+"---->"+end); }else{ // 1 3 2 hanoi(n-1,start,end,middle);//把第一个上的n-1个移到中间 System.out.println(start+"---->"+end);//把第一个上的一个移到最后 // 2 1 3 hanoi(n-1,middle,start,end);//把中间的n-1个移到最后 } }
这个的好好琢磨琢磨
生活中我们遍历内存卡用到递归。