2013-01-15 56 views
0

我想向一個線程運行的運行中遞歸函數()方法 - 這裏有一個例子片段..run()方法中的遞歸函數?

yt[c] = new Thread (
    new Runnable() { 
    public void run() { 
    /* recursive function here */ 
    } 
    } 
); 

是他們的任何方式運行中)來實現這一點(方法?在方法中有效嵌入方法(我假設遞歸函數必須作爲方法實現)?

作爲一個微不足道的例子說如何實現n!在一個run()方法(遞歸不迭代)?我感到困惑。

非常感謝。

回答

6

有效地嵌入的方法

好中的一個方法,你不會嵌入在run方法本身的方法。而是隻需添加另外一個更多的方法來run並調用它: -

new Thread (
    new Runnable() { 
     public void run() { 
      /* recursive function here */ 
      fact(10); 
     } 

     private void fact(int n) { 
      // logic 
     } 
    } 
); 

由於與new Runnable() { },你只是創建一個匿名類實現Runnable接口,因此,沒有人添加自己阻止你額外的方法。也許你也可以製作它private,因爲你不會從外面使用它。

+0

非常感謝 - 我現在看到範圍在runnable塊內,因此對run()函數可見!很好的回覆。 –

+0

@nfcpro ..不客氣:) –

2

只需在Runnable(或您可以從run()方法中調用它的任何地方)添加另一種方法即可。這裏沒有什麼特別的,這將使得很難從run()方法中調用遞歸方法。

yt[c] = new Thread (
    new Runnable() { 
     public void run() { 
      System.out.println(compute(10L)); 
     } 

     private long compute(long n) { 
      if (n == 0) { 
       return 1L; 
      } else { 
       return n * compute(n - 1L); 
      } 
     } 
    } 
); 
+0

欣賞編碼功能所需的時間 - 儘管它微不足道 - 謝謝! –