最近去做了一道笔试题。 题目大概如下 :
一个人从100米高空蹦极, 每次反弹到上一次高度的一半。 问第十次反弹的高度以及十次一共经过了多少米?
要求: 不能使用编程语言现有的类或者方法 。所以不能使用Math.pow(2,10)这种方法
分析:
(1) 反弹高度求解:
因为从100米高空往下跳 :
第一次反弹: 100/2
第二次反弹: 100/2/2
…
第n次反弹 100/2^n。
所以函数关系式应该是:
f(1) = height/2
f(2)=f(1)/2
…
f(n) = f(n-1)/2
所以算法如下:
public double rebounce( double height, int times){
if(times1){
return height/2;
}
return rebounce(height, times-1)/2;
}
(2)i经过多少米:
第一次到反弹回来
次数 当前高度 反弹高度 经过高度(不包括前一次) 经过 总高度
1 100 50 100+50 100+50
2 50 25 50+25 100+50+50+25
3 25 12.5 25+12.5 100+50+50+25+25+12.5
…
n [ 100/2^(n-1) ] [100/2^n] [ 100/2^(n-1) ] + [100/2^n] sum(100*(1-(1/2)n)/(1-1/2))+sum(50*(1-(1/2)