java 請解懌遞回

public class Ch4_6_2

{

static void towerofhanoi(int dishs, int peg1, int peg2, int peg3)

{

if(dishs == 1)

{

System.out.print("盤子從"+ peg1);

System.out.println("移到"+ peg3);

}

else

{

towerofhanoi(dishs-1, peg1, peg3 , peg2);

System.out.print("盤子從"+ peg1);

System.out.println("移到"+ peg3);

towerofhanoi(dishs-1, peg2 ,peg1 ,peg3);

}

}

public static void main(String[] args)

{

int dishs=3;

towerofhanoi(dishs,1,2,3)

}

}

請幫我解懌遞回:

1.程式一直跑到towerofhanoi(dishs,1,2,3)時跳進

static void towerofhanoi(int dishs, int peg1, int peg2, int peg3)然後在if不成立在跳到towerofhanoi(dishs-1, peg1, peg3 , peg2);對吧?

2.towerofhanoi(dishs-1, peg1, peg3 , peg2);是將值(3-1,1,3,2);

然後又一直呼叫自已直到dishs=1跳回if嗎?才會執行出第一行程式…盤子從1移到3嗎?那後面還有三行程式不用沒用了,我卡死在這裡,請點醒我。

3.那後來的成序是怎麼跑的,請詳細說明。

4.並沒有輸出peg2,那1移到2 和 2移到1是怎麼秀出來的。

*********請點醒我謝謝***********

2 Answers

Rating
  • 1 decade ago
    Favorite Answer

    1 public class Ch4_6_2{

    2 static void towerofhanoi(int dishs, int peg1, int peg2, int peg3)

    3 {

    4if(dishs == 1){

    5System.out.print("盤子從"+ peg1);

    6System.out.println("移到"+ peg3);

    7}

    8else{

    9towerofhanoi(dishs-1, peg1, peg3 , peg2);

    10System.out.print("盤子從"+ peg1);

    11System.out.println("移到"+ peg3);

    12towerofhanoi(dishs-1, peg2 ,peg1 ,peg3);

    13}

    14}

    15public static void main(String[] args){

    16int dishs=3;

    17towerofhanoi(dishs,1,2,3);

    18

    19}

    20}

    22 dishs =3 程式 17行 towerofhanoi(3,1,2,3) 呼叫 2~14行的副程式

    23 dishs =3 所以執行 9~ 12行

    24 towerofhanoi(2,1,3,2);

    25 System.out.print("盤子從"+ 1);

    26 System.out.println("移到"+ 3);

    27 towerofhanoi(2,2,1,3);

    28 24行又呼叫 towerofhanoi(2,1,3,2)

    29 這時 dishs =2 所以執行 9~ 12行

    30 towerofhanoi(1,1,2,3);

    31 System.out.print("盤子從"+ 1);

    32 System.out.println("移到"+ 2);

    33 towerofhanoi(1,3,1,2);

    34 30行又呼叫 towerofhanoi(1,1,2,3)

    35 這時 dishs =1 所以執行 5~ 6行

    36 System.out.print("盤子從"+ 1);

    37 System.out.println("移到"+ 3);

    38 33行也呼叫 towerofhanoi(1,3,1,2)

    39 這時 dishs =1 所以執行 5~ 6行

    40 System.out.print("盤子從"+ 3);

    41 System.out.println("移到"+ 2);

    36,37 代入 30行 40,41代入33行

    結果為

    42 ystem.out.print("盤子從"+ 1);

    43 System.out.println("移到"+ 3);

    44 System.out.print("盤子從"+ 1);

    45 System.out.println("移到"+ 2);

    46 System.out.print("盤子從"+ 3);

    47 System.out.println("移到"+ 2);

    48 27行呼叫towerofhanoi(2,2,1,3);

    49 這時 dishs =2 所以執行 9~ 12行

    50 towerofhanoi(1,2,3,1);

    51 System.out.print("盤子從"+ 2);

    52 System.out.println("移到"+ 3);

    53 towerofhanoi(1,1,2,3);

    54 50行又呼叫 towerofhanoi(1,2,3,1)

    55 這時 dishs =1 所以執行 5~ 6行

    56 System.out.print("盤子從"+ 2);

    57 System.out.println("移到"+ 1);

    58 53行也呼叫 towerofhanoi(1,1,2,3)

    59 這時 dishs =1 所以執行 5~ 6行

    61 System.out.println("移到"+ 1);

    62 System.out.println("移到"+ 3);

    56,57行帶入 50行 61,62行帶入 53行

    結果為

    63 System.out.print("盤子從"+ 2);

    64 System.out.println("移到"+ 1);

    65 System.out.print("盤子從"+ 2);

    66 System.out.println("移到"+ 3);

    67 System.out.println("移到"+ 1);

    68 System.out.println("移到"+ 3);

    42~47行代入24行 63~68代入27行

    結果為

    2009-09-03 21:25:36 補充:

    System.out.print("盤子從"+ 1);

    System.out.println("移到"+ 3);

    System.out.print("盤子從"+ 1);

    System.out.println("移到"+ 2);

    System.out.print("盤子從"+ 3);

    System.out.println("移到"+ 2);

    2009-09-03 21:25:57 補充:

    System.out.print("盤子從"+ 1);

    System.out.println("移到"+ 3);

    System.out.print("盤子從"+ 1);

    System.out.println("移到"+ 2);

    System.out.print("盤子從"+ 3);

    System.out.println("移到"+ 2);

    2009-09-03 21:28:30 補充:

    System.out.print("盤子從"+ 1);

    System.out.println("移到"+ 3);

    System.out.print("盤子從"+ 2);

    System.out.println("移到"+ 1);

    System.out.print("盤子從"+ 2);

    System.out.println("移到"+ 3);

    2009-09-03 21:30:13 補充:

    補充的答案有點亂 ~~

    稿不懂知識+

    希望你能看懂

    2009-09-03 21:31:16 補充:

    最後結果是

    盤子從1移到3

    盤子從1移到2

    盤子從3移到2

    盤子從1移到3

    盤子從2移到1

    盤子從2移到3

    盤子從1移到3

    Source(s): me, 補充, 補充, 補充, 補充, 補充
  • 1 decade ago

    1.是的。

    2.一直跑到最底層後會回來執行後面三行,

    遞迴就複雜在它的巢狀結構,請看下面我以圖示回答。

    3.

     --------->(3,1,2,3)

       |

       ---------->(2,1,3,2)

       |  |

       |  --------------->(1,1,2,3)---->第一行"盤子從1移到3"

       |  |

       |  ----------------------->第二行"盤子從1移到2"

       |  |

       |  --------------->(1,3,1,2)---->第三行"盤子從3移到2"

       |

       ------------------------第四行"盤子從1移到3"

       |

       ---------->(2,2,1,3)

         |

         --------------->(1,2,3,1)---->第五行"盤子從2移到1"

         |

         ----------------------->第六行"盤子從2移到3"

         |

         --------------->(1,1,2,3)---->第七行"盤子從1移到3"

    4.每一層的peg1,2,3都依照傳入值而不一樣,別跟上一層同名的peg1,2,3搞混就可以理解出答案。

    Source(s): 自己
Still have questions? Get your answers by asking now.