codewars-js练习
2021/3/29
github 地址
【1】<5kyu>【Perimeter of squares in a rectangle】
See Fibonacci sequence
The drawing shows 6 squares the sides of which have a length of 1, 1, 2, 3, 5, 8. It’s easy to see that the sum of the perimeters of these squares is : 4 * (1 + 1 + 2 + 3 + 5 + 8) = 4 * 20 = 80
example:
perimeter(5) should return 80
perimeter(7) should return 216
solution
<script type="text/javascript">
function perimeter(n) {
if(n==0)return 4;
return 4 * eval(fibonacci(n).join("+"));
}
function fibonacci(n) {
/*
先判断n是否小于等于0,若符合则返回[]
否则先生成斐波那契数列,然后再根据n返回前n位
*/
if(n<=0)return [];
var result = [];
var res1 = 1;
var res2 = 1;
var sum = res2;
if(n == 1)result.push(1);
else if(n == 2) result = [1,1];
// else if(n == 3) result = [0,1,1];
else if(n>2){
result = [1,1]
for(var i = 1;i < n;i ++){
sum = res1 + res2;
res1 = res2;
res2 = sum;
// console.log('sum',sum)
result.push(sum)
}
}
return result;
}
// 验证
// console.log(perimeter(0));// 4
console.log(perimeter(5));//80
</script>
function perimeter(n) {
let i, fib = [1, 1];
for(i = 2; i <= n; i++) {
fib[i] = fib[i-2] + fib[i-1];
}
let total = fib.reduce((a, b) => a + b);
return 4 * total;
}