1. 程式人生 > >跟著阿里學JavaDay06——Java基礎語法(四)

跟著阿里學JavaDay06——Java基礎語法(四)

一、方法

 

 方法執行到return語句後,這個方法的執行就結束了,方法可以有返回值,但可以不用這個返回值。方法首先要定義,然後才能呼叫。

public class TestMethod{
    public static void main(String args[]){
        m();
        m1(3);
        m2(2,3);
        int i = m3(4,5);
        System.out.println(i);
    }
    //以下定義的都是靜態方法,靜態方法可以在main()方法裡面直接呼叫
    public static void m(){
            System.out.println("Hello!");
        }

    public static void m1(int i){
            if(i==5){
                    return;
                }
            System.out.println(i);
        }

    public static void m2(int i,int j){
            System.out.println(i+j);
        }

    public static int m3(int i,int j){
            return i+j;
        }
}
View Code

二、變數的作用域

變數的作用域只在“{  }”有效,出了這個“{  }”就沒有作用了

三、遞迴呼叫

遞迴:在一個方法內部對自身的呼叫就稱為遞迴

 

 

 可能很多同學還是看不懂上圖的分析,下面我們來分解一下method方法這個遞迴函式:

首先,method(5):return  5*method(4);

這裡的method(4):return  4*method(3);

接著來method(3):return  3*method(2);

緊接著method(2):return  2*method(1);

終於到了method(1):return  1;

細心的同學發現了,這是一個求階乘的函式,這裡求5!;我們從上面分析的逆向看,是不是可以得出1*2*3*4*5呢??

我們的遞迴函式需要從逆向思維去編寫,為什麼呢?

因為方法傳進來的形參,就是我們的計算終止最大值;若我們從最小值1開始算,那傳進來的形參是1的話,就不能設定上限值了。

因此我們的遞迴方法,也需要有一個計算起始和終止域。而起始域即我們方法的終止域(這裡是1);終止域是我們的起始域(這裡是形參);

我們再來個趣味數學題(猴子吃桃問題):

猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個。第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩的一半零一個。到第10天早上想再吃時,見只剩下一個桃子了,求第一天共摘了多少桃子?(先思考一下,再點開看分析和原始碼)

/*猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個。
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。
以後每天早上都吃了前一天剩的一半零一個。
到第10天早上想再吃時,見只剩下一個桃子了。
求第一天共摘了多少桃子?

我們首先來定義幾個變數:day(天數)、peach(桃子的個數)
然後分析確定的終止值:這裡我們的第10天只剩下1個桃子就是我們的終止最小值;
那麼我們的最大值呢??
我們的最大值根據題目可以分析得出:第day天有peach個桃子;
可能到這裡有些同學就懵了。我們不妨想一下,把題目問的第一天改成第9天試試:
第9天摘了多少個桃子?
是不是(1+1)*2=4個呢?
第8天呢?
是不是(4+1)*2=10個呢?
從上面可以看出,我們要知道第8天的數量;
是不是就需要知道第9天的數量然後加1乘2就可以了
同理,我們要知道第1天的數量;
就需要知道第2天的數量然後加1乘2
既有(peach(day+1)+1)*2;
*/

public class MonkeyPeach{
    public static void main(String[] args){
        System.out.println(peach(1));
    }
    public static int peach(int day){
        if(day<1||day>10){
            return 0;
        }else if(day == 10){
            return 1;
        }else{
            return (peach(day+1)+1)*2;
        }
    }
}
View Code

 

感謝阿里雲開發者社群,讓我有整套系統的Java學習教程

同時,感謝部落格園,讓我有一個免費的部落格,並讓我做筆記學習!!

&n