递归执行机制

 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 }

 

posted @ 2022-02-25 23:21  捞月亮的渔夫  阅读(87)  评论(0)    收藏  举报