js 斐波那契数列 汉诺塔 阶乘递归常见小算法

//斐波那契数列  1,1,2,3,5,8,13,21,34....
function fun(n) {
    if (n <= 0) {
        return 0
    }
    if (n <= 2) {
        return 1
    }
    return fun(n - 1) + fun(n - 2)
    //fun(4)+fun(3)
    //fun(3)+fun(2) +fun(2)+fun(1)
    //fun(2)+fun(1)+fun(2)+ fun(2)+fun(1)
    //1+1+1+1+1=5
}

console.log(fun(5));  //5

//阶乘算法 m!=m*(m-1)...2*1
function f(m) {
    if (m <= 1) {
        return 1
    }
    return m * f(m - 1)
}

console.log(f(5)); // 120
//5*4*3*2*1

//上楼梯问题 上楼一次1步,两步或3步,计算共有多少方法
function steps(j) {
    if (j <= 0) {
        return 0
    }
    if (j === 1) {
        return 1
    }
    if (j === 2) {
        return 2
    }
    if (j === 3) {
        return 4
    }  //一次一步;一次三步;先一步后两步;先两步后一步
    return steps(j - 1) + steps(j - 2) + steps(j - 3)
}

console.log(steps(5));  //13


//两个数之间最大公约数(如果相等,是其本身,否则两者相减得绝对值和最小值比较)
function Num(a, b) {
    if (a === b) {
        return a;
    }
    return Num(Math.abs(a - b), Math.min(a, b));
}

console.log(Num(12, 15));   //3

//汉诺塔
var hanoi = function (n, from, ass, to) {
    if (n === 1) {
        move(from, to);
    } else {
        hanoi(n - 1, from, to, ass);
        move(from, to);
        hanoi(n - 1, ass, from, to);
    }
};
var move = function (from, to) {
    console.log("从" + from + "到" + to);
};
hanoi(2, "A", "B", "C");

//DOM树,获取一个节点的所有父节点
var array = [];

function getNode(node) {
    node = node.parentNode;
    if (node.tagName) {
        array.push(node.tagName);
        getNode(node)
    }
}

getNode(document.getElementById('node'));
console.log(array);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值