你好同学,我是沐爸,欢迎点赞、收藏、评论和关注!个人知乎
从今天开始,一起了解算法,每日一题,从 JavScript 的技术角度进行解答,如果你对算法也感兴趣,请多多关注哦。
问题描述
一根高筋拉面,中间切一刀,可以得到2根面条。
如果先对折1次,中间切一刀,可以得到3根面条。
如果连续对折2次,中间切一刀,可以得到5根面条。
那么,连续对折10次,中间切一刀,会得到多少面条呢?
A. 1024
B. 512
C. 1025
D. 513
问题图解
问题分析
1、不对折(对折零次),从中间切一刀,得到 2 根面条, 2 = 2^0 + 1
2、对折一次,从中间切一刀,得到 3 根面条, 3 = 2^1 + 1
3、对折两次,从中间切一刀,得到 5 根面条, 5 = 2^2 + 1
4、对折三次,从中间切一刀,得到 9 根面条, 9 = 2^3 + 1
...
11、对折十次,从中间切一刀,得到 2^10 + 1
根面条
通过观察对折和切割后的面条数量增长规律,我们会发现:每次对折后,面条的数量变为原来的两倍(2^n
),然后由于切割操作,新增一根面条,所以总数是 2^n + 1
。
JavaScript 题解代码
可以使用 JS 中 Math方法的幂运算pow进行表达:
javascript
function fn(n) {
return Math.pow(2, n) + 1;
}
console.log(fn(10));
运行这段代码,将输出对折10次后切割得到的面条数量。根据公式 fn(10) = 2^10 + 1 = 1024 + 1 = 1025
,所以输出结果应该是 1025
。
好了,分享结束,谢谢点赞,下期再见