//斐波那契数列 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);
js 斐波那契数列 汉诺塔 阶乘递归常见小算法
最新推荐文章于 2024-03-14 22:10:15 发布