2010-05-17 21 views
1

這是最大搜索算法圖: alt text http://img-photo.apps.zing.vn/upload/original/2010/05/17/17/1274093752543903925_574_574.jpg算法圖

所以,我不知道如何可以繪製圖表爲漢諾塔程序

package tunl; 

public class TowersApp { 
    static int n = 3; 

    public static void main(String[] args) { 
     TowersApp.doTowers(3, 'A', 'B', 'C'); 
    } 

    public static void doTowers(int n, char from, char inter, char to) { 
     if (n == 1) { 
      System.out.println("disk 1 from "+ from + " to " + to); 
     } else { 
      doTowers(n-1, from, to, inter); 
      System.out.println("disk " + n + " from " + from + " to " + to); 
      doTowers(n-1, inter, from, to); 
     } 
    } 
} 

我不能畫它。 任何人都可以幫助我!

+0

現在,對於這些手繪圓形圖中的一個來說,這是一個很好的機會:D – luvieere 2010-05-17 11:01:49

+0

您是英文的這個圖嗎? – 2010-05-17 11:05:13

+2

哇,我不知道有人還在使用流程圖進行編程! – 2010-05-17 11:25:07

回答

1

這種類型的流程圖無法直接對遞歸實現進行建模。 1)一種解決方案是將算法重寫爲非遞歸,然後繪製圖表。

我承認這不是很滿意。


1)那麼,在技術上他們可以但他們不再有用,因爲它們不再代表由遞歸調用所隱含的控制流數據堆棧

2

您的難題在於該算法是遞歸的。一種選擇是將其轉換爲具有顯式堆棧的迭代算法。但是這會丟失算法的一些高級結構。這將是很好的顯示遞歸結構。

我不知道遞歸的標準流程圖成語,但我畫的是流程圖的基本算法,並在其周圍放上一個與調用中使用的名稱相同的名稱。由於調用與父調用的參數略有不同,因此可以將這些參數分配給新變量,然後將這些變量作爲參數傳遞。通話本身可以標註爲「CALL doTowers」或類似名稱。