一、遞歸與迴圈的對比 遞歸會帶來大量的函數調用。這是不好的 在計算環節特別大的前提下,遞歸就是不好的,因為遞歸是先調用,再計算。 在大量計算的前提下可能會造成棧溢出(StackOverFlow) 如下圖: 迴圈是先計算再調用,計算完後會調用的方法會從棧中抹去,最後將結果輸出 能不用遞歸就不用遞歸 小 ...
一、遞歸與迴圈的對比
-
遞歸會帶來大量的函數調用。這是不好的
-
二、遞歸講解
1、概念
-
A方法調用B方法,我們很容易理解
-
遞歸就是:A方法調用A方法!就是自己調用自己
2、遞歸的用處
-
遞歸策略只需要少量的程式就可以描述出解題過程所需要的多次重覆計算,大大減少了程式的代碼量
-
遞歸的能力在於用有限的語句來定義對象的無限集合
3、遞歸結構包含兩個部分
-
遞歸頭:什麼時候不調用自身方法。如果沒有頭,將陷入死迴圈
-
遞歸體:什麼時候需要調用自身方法
4、代碼如下
5、遞歸的壞處
-
遞歸會帶來大量的函數調用。這是不好的
-
1、while 迴圈
-
基本結構
1 while( 布爾表達式 ){ 2 //迴圈結構 3 }
-
只要布爾表達式為true,迴圈就會一直執行下去
-
迴圈條件一直為true就會造成無限迴圈【死迴圈】,這是在正常程式下需要避免的
-
少部分情況下需要迴圈一直執行下去。例如伺服器的請求響應監聽等
-
1 //例子:從1加到100求和 2 //代碼主要部分 3 while(i<=100){ 4 sum+=i; 5 i++; 6 }
2、do...while迴圈
-
對於while'語句而言,如果不滿足條件,則不能進入迴圈,但有時候我們需要即使不滿足條件的情況下,程式也要至少執行一次
-
do.....while迴圈和while迴圈相似,不同的是:do....while迴圈至少會執行一次
-
語法結構
1 do{ 2 //代碼語句 3 }while(布爾表達式);
-
while與do-while的區別
while是先判斷後執行。do-while是先執行後判斷
do-while總是保證迴圈體至少會被迴圈一次!這是它們的主要區別
-
1 //例子:從1加到100求和 2 //代碼主要部分 3 do{ 4 sum+=i; 5 i++; 6 }while(i<=100);
3、for 迴圈
-
雖然所有的迴圈結構都可以使用while和do....while表示,但Java提供了另一種語句:
for迴圈
-
for迴圈相較與其它二者更高效,執行速度快
-
格式如下
1 for(初始化;布爾表達式;迭代式){ 2 //代碼語句 3 }
4、在Java5
種引入了一種主要用於數組的增強型for迴圈
-
主要是用來遍歷
數組
與集合
的 -
格式如下:
1 for(聲明語句:表達式){ 2 //代碼語句 3 } 4 5 6 //例子如下: 7 int[] numbers={1,2,3,4,5}; 8 for(int x:numbers){ 9 System.out.println("數組中的元素為"+x) 10 }
-
聲明語句:聲明新的局部變數,該變數的類型必須和數組元素的類型匹配。
-
其作用域限定在迴圈語句塊,其值與此時數組元素的值相等。
-
-
表達式:表達式是要訪問的數組名,或者是返回值為數組的方法。
-
另加:數組的靜態與動態定義