递归执行机制
1 public class Recursion01{
2 public static void main(String [] args){
3
4 Fix can = new Fix();
5 can.test(5);
6 /*
7 n=2,n=3,n=4,n=5
8 */
9
10 }
11 }
12
13
14
15
16 class Fix{
17 public void test (int n ){
18 if (n>2) {
19 test(n-1);
20 }
21 System.out.println("n="+n);
22 }
23 }
递归重要规则:
1.执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
2.方法的局部变量是独立的,不会相互影响,比如N变量
3.如果方法中使用的是引用类型变量(比如:数组),就会共享该引用类型的数据
4.递归必须向退出递归的条件逼近,否则就是无限递归。
5.当一个方法执行完毕,或者遇到return,就会返回,遵守谁调用就将结果返回给谁,同时当方法执行完毕或者返回时,该方法也就执行完毕。
斐波拉契案列:请使用递归的方法求出斐波拉契数1,1,2,3,5,8,13,21...给你一个整数n,求出它的值是多少?
1 public class FeiBo{
2 public static void main(String [] args){
3
4 Find can = new Find();
5 int n =1;
6 int res = can.test(n);
7 if (n!=-1) {
8 System.out.println("当n="+n+"时"+"斐波拉契="+res);
9 }
10
11 }
12 }
13
14
15
16 class Find{
17 /*
18 案列:请使用递归的方法求出斐波拉契数1,1,2,3,5,8,13,21...
19 给你一个整数n,求出它的值是多少?
20
21 思路分析:
22 当n=1,菲拉=1
23 n =2,菲拉=1
24 n=3,菲拉=2 n=3是前两个数的和:(n-1)+(n-2)
25 n =4, 菲拉= 3
26
27 返回类型Int
28 名字test
29 形参类型:int
30 方法体:if判断
31 */
32
33 public int test(int n){
34 if (n>=1) {
35 if (n==1||n==2) {
36 return 1;
37 }else {
38 return test(n-1)+test(n-2);
39 }
40
41 }
42 System.out.println("输入错误,请输入大于1的整数");
43 return -1;
44 }
45
46 }
猴子吃桃案列:有一堆桃子,猴子第一天吃了其中的一半,并再多吃一个;以后每天猴子都吃其中的一半,然后再多吃一个,当吃到第10天时,想要在吃时(还没吃)
发现只有1个桃子了,问题最初一共有多少个桃子?
1 public class TaoZi{ 2 public static void main(String [] args){ 3 Hou can = new Hou(); 4 int n =20; 5 int res = can.peach(n); 6 if (n!=-1) { 7 System.out.println("当天数="+n+"桃子还有="+res); 8 } 9 } 10 } 11 12 /* 13 递归方法: 14 15 案列:有一堆桃子,猴子第一天吃了其中的一半,并再多吃一个;以后每天猴子都吃其中的一半, 16 然后再多吃一个,当吃到第10天时,想要在吃时(还没吃) 17 发现只有1个桃子了,问题最初一共有多少个桃子? 18 19 分析:逆推法 20 day =10, peach = 1 21 day = 9, peach =(day10+1)*2 22 day = 8, peach = (day9+1)*2 23 24 25 */ 26 27 28 class Hou{ 29 public int peach(int day){ 30 if (day ==10) { 31 return 1; 32 }else if (day>=1 && day<=9) { 33 return (peach(day+1)+1)*2; 34 }else { 35 System.out.println("你输入的天数有误,天数范围在1到10"); 36 return -1; 37 } 38 39 } 40 }
想多了都是问题,做多了才是答案

浙公网安备 33010602011771号