本文共 1749 字,大约阅读时间需要 5 分钟。
1.1 递归
递归,指在当前方法内调用自己的这种现象public void method(){System.out.println(“递归的演示”);//在当前方法内调用自己method();}
1.2 递归练习
1.2.1 递归求5的阶乘利用递归求出5!的结果1.2.1.1 案例代码十一:package com.itheima_01;/** 需求:求5的阶乘* 5! = 5 * 4 * 3 * 2 * 1; //120* 5! = 5 * 4!; //120* 4! = 4 * 3!; //24* 3! = 3 * 2!; //6* 2! = 2 * 1!; //2* 1! = 1; //1n! = n * (n - 1)!递归:把大问题拆成很多小问题,然后再把小问题拆成更多的小问题,当我们把更多小问题解决了,小问题也解决了随着小问题的解决,大问题也随之解决了在方法本身不断的调用方法自己递归注意事项:递归一定要有出口,内存溢出递归次数不宜过多,内存溢出public void show(int n) {//5//出口if(n == 0) {return;}show(n - 1);}从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事* 从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事* 从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事* 从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事* 从前有座山,山里有个庙,庙里有个老和尚,老和尚在给小和尚讲故事* ...** 学习编程...找工作...赚钱...娶媳妇...生娃娃学习编程...找工作...赚钱...娶媳妇...生娃娃学习编程...找工作...赚钱...娶媳妇...生娃娃学习编程...找工作...赚钱...娶媳妇...生娃娃学习编程...找工作...赚钱...娶媳妇...生娃娃...**/public class RecurrenceDemo {public static void main(String[] args) {int result = jC(5);System.out.println(result);//120}//求一个数的阶乘public static int jC(int n) {//必须要有出口if(n == 1) {return 1;}else {return n * jC(n - 1);}}}
1.2.2 斐波纳挈数列
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?1.2.2.1 案例代码十二:package com.itheima_01;/* * 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死, * 问第二十个月的兔子对数为多少? * * * 1 * 1 * 2 * 3 * 5 * 8 * 13 * * 规律:除了第一个月和第二月以外,其余每个月都是前两个月之和 * 斐波那契列数 * */public class RecurrenceDemo2 {public static void main(String[] args) {int result = method(20);//6765System.out.println(result);}public static int method(int n) {//如果是第一个月,只有一对兔子if(n == 1) {return 1;}//如果是第二个月,也只有一对兔子else if(n == 2) {return 1;}else {//如果不是第一个月和第二个月,则兔子的数量是前两个月之和return method(n - 1) + method(n - 2);}}}
转载于:https://blog.51cto.com/13517854/2103881