河内塔- JavaScript -好的部分
Tower Of Hanoi - JavaScript - THe Good Parts
本文关键字:JavaScript 内塔 更新时间:2023-09-26
我已经看到了SO上关于递归函数的其他问题,我已经阅读了回复,但我仍然无法让算法点击我的头
var hanoi = function (disc, src, aux, dst) {
if (disc > 0) {
hanoi(disc - 1, src, dst, aux);
document.write('Move disc ' + disc + ' from ' + src + ' to ' + dst);
hanoi(disc - 1, aux, src, dst);
}
}
hanoi(3, 'Src', 'Aux', 'Dst');
document.write(…)是如何运行的?我的逻辑是第一次我们运行函数盘是> 3。然后我们再次递归地调用函数跳过下面的所有内容,那么文档如何。写有机会跑吗?
我理解递归(做了基本的例子),但我仍然看不出你是如何得到输出的。如果有一种方法,我可以运行它的视觉和看到它在行动,这将帮助很大。
你可以把它想象成一个调用树(时间从上到下移动):
hanoi(3, ...) =>
|-> hanoi(2, ...) =>
| |-> hanoi(1, ...) =>
| | |-> hanoi(0, ...) =>
| | | '-> (does nothing)
| | |-> document.write(...)
| | |-> hanoi(0, ...) =>
| | | '-> (does nothing)
| | <-/ [hanoi(1, ...) finished]
| |-> document.write(...)
| |-> hanoi(1, ...) =>
| | |-> hanoi(0, ...) =>
| | | '-> (does nothing)
| | |-> document.write(...)
| | |-> hanoi(0, ...) =>
| | | '-> (does nothing)
| | <-/ [hanoi(1, ...) finished]
| <-/ [hanoi(2, ...) finished]
|-> document.write(...) [halfway done!]
|-> hanoi(2, ...) =>
| '-> [same pattern as the first time, with different data]
'-> [hanoi(3, ...) finished]
相关文章:
- Javascript内联onclick-goto本地锚点
- 无需Javascript内置函数即可将十进制转换为十六进制
- 如何区分JavaScript内置对象
- JavaScript内联与传统注册
- 任何应用“webkit-overflow-scrolling: touch”与javascript内联的方法
- JavaScript 内联如果变量像 PHP 一样赋值
- 使用 javascript 内联表单标签和字段
- 缓存 JavaScript 内联在 HTML 中
- 外部JavaScript文件使用的JavaScript内联变量?(可变范围问题)
- 绑定 JavaScript:内联或外部(或脚本)
- 如果锚点在 Javascript 内,我无法打开灯箱
- 为什么类属性不能通过javascript内联赋值
- ASP.Net MVC-如何在没有Bundles的情况下最小化JavaScript(内联/外部文件)
- Thymelaf,Javascript内联和迭代
- onclick=“"javascript内联问题
- Javascript内联脚本和外部脚本的区别
- buble对数组进行排序,并在不使用javascript内置函数的情况下将它们合并
- 可拖动的HTML Javascript内联弹出窗口
- javascript内置拆分函数的大O
- Javascript内联返回