//练习计算任意数的阶乘
/*
function jc(n){
//当n为1的时候,之间返回1,不再往后执行,结束了递归
if(n===1){
return 1
}
//n的阶乘,由n*n-1的阶乘组成
return n*jc(n-1)
}
jc(4)
console.log(jc(4))
*/
//猴子吃桃问题:猴子第一天摘下若干个桃子,
//当即吃了一半,还不瘾,又多吃了一个
// 第二天早上又将剩下的桃子吃掉一半,
//又多吃了一个。
//以后每天早上都吃了前一天剩下的一半零一个。
//到第10天早上想再吃时,见只剩下一个桃子了。
//求第一天共摘了多少。
/*
//创建函数f(n)表示第n天的桃子数量
function f(n){
//思路:第二步
//设置n为边界,为第n天最后的桃子数量
//题目是第10天还剩一个
if(n==10){
return 1
}
//思路:第一步
//寻找f(n)和f(n-1)的关系
//经分析得出 f(n)=2*(f(n+1)+1)
return 2*(f(n+1)+1)
}
console.log(f(1))
*/
//一球从100米高度自由落下,
//每次落地后反跳回原高度的一半;再落下
//求它在第10次落地时,共经过多少米?
//第10次反弹多高?
/*
//h(s)为第s次反弹多高
function h(s){
//(2)寻找边界
if(s==0){
return 100
}
//(1)h(s)=h(s-1)/2
return h(s-1)/2
}
console.log(h(10))
*/
//细胞分裂,一个细胞一小时分裂一次,生命周期是3小时
//求n小时,有多少细胞
//分析细胞每个小时都分裂,并且分三个阶段(生命周期3小时)
//一个细胞分裂后,一个第一阶段,自己进入下一阶段
//第四小时会死亡
//第n小时会有 三个阶段的细胞
//寻找关系:本小时第三阶段的细胞等于上一小时第二阶段的细胞
// 第二阶段的细胞等于第一阶段的细胞,第一阶段的细胞
// 可以由上个阶段三个阶段的细胞产生
//递归,从尾向上推
//sum(n)为第n小时的总细胞
//f3(n)第三阶段的细胞
//f2(n)第二阶段的细胞
//f1(n)第一阶段的细胞
function f3(n){
if(n<2){
return 0
}
return f2(n-1)
}
function f2(n){
if(n<1){
return 0
}
return f1(n-1)
}
function f1(n){
if(n<1){
return 1
}
return f1(n-1)+f2(n-1)+f3(n-1)
}
function sum(n){
return f1(n)+f2(n)+f3(n)
}
var total = sum(2)
console.log(total)