1:普通實作99乘法表太簡單,是個程式設計師都會,實作如下:
package test.ms;public class Test99 { public static void main(String[] args) { for(int i=1; i<=9;i++){ for(int j=1; j<=i; j++){ System.out.print(j+" * "+i+ " = "+(i*j) +" "); } System.out.println(); }} }
2:用遞歸方式實作99乘法表
程式碼如下:
package test.ms;public class MultiTable { public static void main(String args[]) { m(9); } /** * 印出九九乘法表* @param i */ public static void m(int i) { if (i == 1) { System.out.println("1*1=1 "); } else { m(i - 1); for (int j = 1; j <= i; j++) { System.out.print(j + "*" + i + "=" + j * i + " "); } System.out.println(); } } }
遞歸的方式呼叫圖示:
每一個方法的呼叫都會產生一個棧幀,壓入到方法棧,當遞歸呼叫的時候,方法棧中棧幀的圖示和上圖類似。
去掉方法中堆疊幀的引用關係較為直觀:如下圖所示:
簡化掉對應的方法呼叫最後執行情況如上圖所示,注意i 一直在變j每次都是從1開始然後遞增到和i相等。
這樣上圖依序出棧後就得到了99 乘法表:
總結:
嵌套for迴圈和用遞歸實現的比較:
棧主要是用來存放棧幀的,每執行一個方法就會出現壓棧操作,所以採用遞歸的時候產生的棧幀比較多,遞歸就會影響到內存,非常消耗內存,而使用for循環就執行了一個方法,壓入堆疊幀一次,只存在一個堆疊幀,所以比較節省記憶體。
歡迎狠狠的拍磚。直到砸暈。