1、上楼梯问题:
楼梯上有n阶台阶,上楼时可以一步上1阶,也可以一步上两阶,编写算法计算共有多少种不同的上楼梯的方法。
只有一阶楼梯时有一种上法 --> 1
有两阶时有两种上法 --> 1->1 | 2
有三阶时有三种上法 --> 1->1->1 | 2-> | 1->2
不难看出这是一个斐波拉契数列所以有规律为 1,2,3,5,8,13…
直接上代码:
function getNumN(n){
if(n == 1)
return 1
if(n == 2)
return 2
<!--第N阶台阶有fn(n-1)+fn(n-2)种上法 -->
return getNumN(n-1) + getNumN(n-2)
}
function numL(){
let num = document.getElementById("num").value;
console.log(`上到第${num}个台阶有${getNumN(num)}种方法`)
}
2、不死兔问题
有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子对数为多少?
一月 | 二月 | 三月 | 四月
一只 | 一只 | 两只 | 三只
和上楼梯问题一样这是一个标准的斐波拉契数列规律为1,1,2,3,5,8
代码:
function getRbtN(n){
if(n <= 2)
return 1
return getRbtN(n-1) + getRbtN(n-2)
}
function rbt(){
let num = document.getElementById("rbt").value;
console.log(`第${num}个月有${getRbtN(num)}对兔子`)
}