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.
Anda boleh melihat urutan Fibonacci untuk ini. The Tower of Hanoi ialah algoritma Fibonacci
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.