前端提高篇(十八)JS进阶13递归函数与汉诺塔练习
程序员文章站
2024-01-04 20:36:40
...
递归定义:函数自己调用自己,需注意,要有终止条件
递归思维:把复杂问题拆阶成越来越简单的问题,直到可以获得结果
使用到数据结构中的栈概念:先进后出
用递归实现n的阶乘:
<script>
function f(n){
console.log(n);
if (n == 1){
return 1;
}
return n * f(n-1);
}
</script>
用递归实现x的n次方:
function f2(x, n){
if (n == 0){
return 1;
}
return x * f2(x,n-1);
}
作业:汉诺塔
hanoi(数量, 启动柱子, 目标柱子, 辅助柱子)
启动柱子设为’A’,最终放在’B’柱子,即目标柱子为’B’
最后一步没想好,因为只要把最后一个盘子放到目标柱子就好了,不需要辅助,不知道有没有哪里理解错了,先写一个版本,后面来补
//汉诺塔
function hanoi(num, start, end, mid){
console.log('start:' + start + ' end:' + end + ' mid:' + mid);
if (num == 1){
return end;
}
return hanoi(num-1,mid,end,start);
}
hanoi(5, 'A', 'B', 'C');
运行结果: