javascript - Tanya tentang algoritma Menara Hanoi
漂亮男人
漂亮男人 2017-05-19 10:43:07
0
2
2622

JS menggunakan rekursi untuk melaksanakan langkah-langkah untuk melengkapkan Menara Hanoi Saya percaya ramai pelajar boleh melakukannya.
Pada masa lapang saya, saya menulis permainan Tower of Hanoi terdapat fungsi peringatan di dalamnya Apabila pengguna mengklik peringatan, program menggunakan rekursi untuk melaksanakan langkah penyiapan, dan kemudian mengendalikan elemen halaman untuk melaksanakannya mengikut. langkah ini.
Kod separa adalah seperti berikut:

var moves = [];  // 存放完成步骤
/**
 * @param disc      当前关卡 (实际上也就是圆盘数量)
 * @param discs1    第一根圆柱
 * @param discs2    第二根圆柱
 * @param discs3    第三根圆柱
 */
function hanoiArithmetic(disc, discs1, discs2, discs3) {
    if (disc > 0) {
        hanoiArithmetic(disc - 1, discs1, discs3, discs2);
        moves.push(discs1 + '>' + discs3);
        hanoiArithmetic(disc - 1, discs2, discs1, discs3);
    }
}
hanoiArithmetic(4, 'discs1', 'discs2', 'discs3');
console.log(moves); 
// 最后得到这样一个步骤列表
[ 'discs1>discs3',
  'discs1>discs2',
  'discs3>discs2',
  'discs1>discs3',
  'discs2>discs1',
  'discs2>discs3',
  'discs1>discs3' ] // 大概意思就是想从第一个圆柱取最上面那个圆盘放到第三个圆柱...

Semuanya baik-baik saja sekarang ialah ini hanya boleh menjadi tahap baru Jika pengguna belum memindahkan sebarang cakera, senarai langkah akan dihasilkan Jika pengguna telah memindahkan cakera, sebagai contoh, langkah pertama adalah sekarang Terdapat 3 cakera pada silinder pertama, 2 cakera pada yang kedua, dan 1 cakera pada yang ketiga Pengguna buntu dan tidak tahu apa yang perlu dilakukan selepas ini, dia mengklik butang peringatan, Bagaimana untuk menyesuaikan mengikut situasi semasa Bagaimana dengan situasi untuk menjana algoritma untuk langkah seterusnya?
Saya berasa malu untuk mengatakan bahawa permainan ini ditulis setengah tahun yang lalu, setakat ini, fungsi peringatan masih belum selesai, dan saya tidak tahu sama sekali.

漂亮男人
漂亮男人

membalas semua(2)
phpcn_u1582

Anda boleh melihat urutan Fibonacci untuk ini. The Tower of Hanoi ialah algoritma Fibonacci

phpcn_u1582

Jika anda memerlukan fungsi peringatan sedemikian, ia akan menjadi lebih rumit daripada yang anda miliki sekarang, dan anda perlu merekodkan status.
Sebagai contoh, dalam contoh anda terdapat 6 cakera, dan terdapat 3 cakera pada tiang pertama, ia mungkin 456, atau mungkin 135. Anda perlu menjelaskan status semasa, kemudian lengkapkan langkah dan kemudian menguraikannya daripada atas ke bawah.

if 最大圆盘不在目标圆柱上 {
  if 最大圆盘不能直接移动到目标圆柱 {
    其他圆盘移动到“中间”圆柱(规模减一)  //非最大圆盘所在圆柱和目标圆柱
  } 
  移动最大圆盘到目标圆柱
}
移动其他圆盘到目标圆柱(规模减一)
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan