问题描述:
一根拉面,中间切一刀,可以得到2根面条。
先对折1次,中间切一刀,可以得到3根面条。
连续对折2次,中间切一刀,可以得到5根面条。那么如果连续对折10次,中间切一刀,会得到多少根面条?
规律1
假设对折次数为X,中间切一刀后得到的面条根数为Y,经过观察得出下面的规律:
对折次数 X | 面条根数 Y | 规律 |
---|---|---|
0 | 2 | 2 = 2 |
1 | 3 | 3 = 2 + 2^0 |
2 | 5 | 5 = 2 + 2^0 + 2^1 |
3 | 9 | 9 = 2 + 2^0 + 2^1 + 2^2 |
根据已知规律编写代码,计算对折10次时的面条根数:
var count = 0; // 根数
var fold = 10;
for (let index = 0; index <= fold; index++)
{
if(index == 0)
{
count += 2;
}
else
{
count += Math.pow(2, index - 1);
}
console.log('===>折叠'+ index + '次,得到' + count + '根!');
}
规律2
经过进一步观察,发现折叠次数X与面条根数Y符合一个规律:Y = 2^x + 1
,代码运行后得到同样结果:
var count = 0; // 根数
var fold = 10;
count = Math.pow(2, fold) + 1;
console.log('===> 折叠10次,得到' + count + '根面条!') ;
// ===> 折叠10次,得到1025根面条!
Math.pow(x, y)方法
Math.pow(x, y)方法,用来进行指数计算,其中参数X是底数,Y是指数。