跟著阿里學JavaDay06——Java基礎語法(四)
阿新 • • 發佈:2020-06-03
一、方法
方法執行到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; } }
二、變數的作用域
變數的作用域只在“{ }”有效,出了這個“{ }”就沒有作用了
三、遞迴呼叫
遞迴:在一個方法內部對自身的呼叫就稱為遞迴
可能很多同學還是看不懂上圖的分析,下面我們來分解一下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