java recursion

2006-12-24 6:21 pm
如果我想用recursion在同一行印四粒星,
public class Recursion {
// method recursivePrint
public void recursivePrint(int count, char ch) {
if (count==0) { System.out.print(ch); }
else { System.out.print(recursivePrint(count-1, ch)); }
}
}
// main TestRecursion
public class TestRecursion {
public static void main (String[] args) {
Recursion Recursion = new Recursion();
Recursion.recursivePrint(1, '*'); }
}

究竟點解錯 ?

回答 (1)

2006-12-25 8:04 am
✔ 最佳答案
第一,你 define 了 recursivePrint() 是不會回傳的,於是以下這句是錯的:
System.out.print( recursivePrint(count-1, ch) )
由於 recursivePrint( cout-1, ch ) 不回傳,
所以 System.out.print() 的括號內將不會收到任何東西,
但 System.out.print() 卻被定義為必須接收 argument,
這是第一個錯。

第二,按你的意思,Recursion.recursivePrint( 1, '*'); 應改寫為
Recursion.recursivePrint( 4, '*');
因為你想印四個星號。

其它錯誤亦更正了,改寫後如下,請參考一下:
public class TestRecursion
{
 public static void main (String[] args)
 {
  Recursion recursion = new Recursion();
  recursion.recursivePrint( 4, '*');
 }

 private static class Recursion
 {
  public void recursivePrint( int count, char ch )
  {
   // base case
   if ( count==0 )
   {
    // do nothing, just return
    return;
   }
   else
   {
    System.out.print( ch );
    recursivePrint( count - 1, ch );
   }
  }
 }
}

每次 recursivePrint() 被 invoke 時,
它先會檢查 count 是否為 0,
如果 = 0,不用再 print 任何 character,
如 > 0,print 多一個 character,
然後再 invoke recursivePrint( count - 1, ch ),
count - 1 的意思是餘下 ( count - 1 ) 未 print,
所以一開始的 recursion.recursivePrint( 4, '*'); 即餘下四個 * 號未 print

註:如有興趣私人補習 Java,請電郵聯絡:[email protected]


收錄日期: 2021-04-13 13:38:39
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20061224000051KK00900

檢視 Wayback Machine 備份