Javascript 如何在没有while循环的情况下重写此代码?

Javascript 如何在没有while循环的情况下重写此代码?,javascript,optimization,Javascript,Optimization,他把球扔出窗外。球反弹(例如)到其高度的三分之二(反弹为0.66) 他的母亲从离地1.5米的窗户向外看 妈妈会看到多少次球从她的窗户前经过(包括落下和反弹的时候) 以下是我的解决方案: 功能弹跳球(h,弹跳,窗口){ 让计数=0; 如果(h窗口){ 跳跃*=反弹 计数+=2; } 返回计数-1; } console.log(bouncingBall(3.0,0.66,1.5))//3您需要计算x,球需要反弹的次数,以使其峰值低于窗口: h * (bounce ** x) = window 求

他把球扔出窗外。球反弹(例如)到其高度的三分之二(反弹
为0.66)

他的母亲从离地1.5米的窗户向外看

妈妈会看到多少次球从她的窗户前经过(包括落下和反弹的时候)

以下是我的解决方案:

功能弹跳球(h,弹跳,窗口){
让计数=0;
如果(h<0 | |反弹=h){
返回-1;
}否则{
计数+=2
}
让跳跃=h*反弹
while(跳转>窗口){
跳跃*=反弹
计数+=2;
}
返回计数-1;
}

console.log(bouncingBall(3.0,0.66,1.5))//3
您需要计算
x
,球需要反弹的次数,以使其峰值低于窗口:

h * (bounce ** x) = window
求解
x
,我们得到

bounce ** x = window / h
ln(bounce ** x) = ln(window / h)
x * ln(bounce) = ln(window / h)
x = ln(window / h) / ln(bounce)
这将为您提供反弹次数,之后峰值将低于窗口。乘以2(因为球上下移动,穿过窗口两次),如果球第一次从高于窗口的位置落下,则加1:

h * (bounce ** x) = window
功能弹跳球(h,弹跳,窗口){
const bounces=Math.floor(Math.log(window/h)/Math.log(bounce));
返回反弹*2+(h>窗口?1:0);
}

log(bouncingBall(3.0,0.66,1.5))
现在你有了正确的答案,为什么不计算一下呢?那“某个时间”远小于一毫秒,为什么要麻烦呢?