JS汉诺塔

函数直接或间接调用自身

避免无限递归,无限递归导致执行栈溢出

对比死循环不会导致栈溢出

执行栈

任何代码的执行都必须有一个执行环境,执行环境为代码的执行提供支持

执行环境是放到执行栈中的

每个函数的调用,都需要创建一个函数的执行环境,函数调用结束,执行环境销毁

执行栈有相对谷固定的大小,如果执行环境太多,执行栈无法容纳,栈溢出会报错

尾递归

如果一个函数最后一条语句是调用函数,并且调用函数不是表达式的一部分,则该语句称为尾调用,如果尾调用是调用自身函数,称为尾递归

某些语言或执行环境会对尾调用进行优化,他们会销毁当前函数,避免执行栈空间被调用

浏览器执行环境中,尾调用没有优化

nodeJs中有优化

汉诺塔

解析参考这个链接吧

C语言实现汉诺塔【图文讲解】_汉诺塔c语言-CSDN博客

// hannuo塔
function move (pillarStart, pillarEnd, plateNumer) {
    console.log(`把第${plateNumer}个盘子从${pillarStart}号柱子挪到${pillarEnd}号柱子`)
}
// no1, no2, no3三个编号的柱子
// 盘子数量
function movePlate (no1, no2, no3, plateNumer) {
    if (plateNumer == 1) {
        move(no1, no3, plateNumer)
    } else {
        //n-1从1号挪到2号 需经过3号
        movePlate(no1, no3, no2, plateNumer - 1)
        //n挪到3号
        move(no1, no3, plateNumer)
        //n-1从2号挪到3号,需经过1号
        movePlate(no2, no1, no3, plateNumer - 1)
    }
}

movePlate('A', 'B', 'C', 4)

JS汉诺塔_第1张图片

你可能感兴趣的:(vue.js,前端,javascript)