JavaScript小练习:斐波那契数列
斐波那契数列
斐波那契数列指的是这样一个数列:1,1,2,3,5,8,13,21,34,55,89…
这个数列从第3项开始,每一项都等于前两项之和。
问题描述
输入一个正整数n,在页面上打印出Fibonacci数列的第n项。
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>//斐波那契数列
var n = parseInt(window.prompt('input'));
var a = 1,
b = 1,
result;
if(n < 3){
result = 1;
}else{
for(var i = 0; i < n - 2; i ++){
a = a + b; //令a=b,b=a+b
b = a - b;
a = a - b;
b = a + b;
}
result = b;
}
document.write('the result is ' + result);
</script>
</body>
</html>
补充:用递归的思想
- 规律:fn(n) = fn(n - 1) + fn(n - 2);
- 出口:fn(1) = 1; fn(2) = 1.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
var num = parseInt(window.prompt("input"));
function fn(n) {
if(n == 1 || n == 2) {
return 1;
}
return fn(n - 1) + fn(n - 2);
}
document.write(fn(num));
</script>
</body>
</html>
可见使用递归的方法,可以更易于编写,只要找出规律,剩下的就非常简单,并且写出来的代码非常简洁。
但是,注意,递归的运算速度较低,在非常复杂的程序中不推荐使用递归编写。