// 编写函数,传参 计算一个数字的阶乘返回
// 假设输入 5 1*2*3*4*5
// 返回值为 阶乘的结果
// 正常使用函数 和 递归函数 两种方法 都实现一次
var w = 1;
for (var i = 1; i <= 5; i++) {
w *= i;
}
console.log(w);//120
// 求 1! + 2!+ 3! + 4! + 5! + 6! + ...... + 20! 的值
// 编写函数,可以通过 传入参数 计算 1到任何值 每个数字的阶乘相加之和,参数为一个数字
// 返回值为 计算的结果
// 例如传入参数 5
// 1*1 + 1*2 + 1*2*3 + 1*2*3*4 + 1*2*3*4*5
function fn1(num) {
// 接收每个数字阶乘结果相加之和的变量
var sum = 0;
// 外层循环,控制计算几的阶乘
for (var k = 1; k <= num; k++) {
// 接收当前循环数字的结果的变量
var n = 1;
// 内层循环,控制实现外层循环变量数值的 阶乘结果
for (var i = 1; i <= k; i++) {
n *= i;
}
// 将当前循环数字的阶乘结果加给sum保存
sum += n;
}
// 返回结果
return sum;
}
var n1 = fn1(20);
console.log(n1); // 2561327494111820300
var n2 = fn1(10);
console.log(n2); // 4037913
var n3 = fn1(3);
console.log(n3); // 9
function fn2(num) {
// 接收每个数字阶乘结果相加之和的变量
var sum = 0;
// 接收每个数字阶乘结构的变量
var n = 1;
// 外层循环,控制计算几的阶乘
for (var k = 1; k <= num; k++) {
n *= k;
sum += n;
}
// 返回结果
return sum;
}
var n4 = fn2(20);
console.log(n4); // 2561327494111820300
var n5 = fn2(10);
console.log(n5); // 4037913
var n6 = fn2(3);
console.log(n6); // 9
// 通过 普通函数 和 递归函数 分别 实现
// 求斐波那契数列的第几项
// 斐波那契额数列:1 1 2 3 5 8 13 21 34 55 ......
// 函数封装,可以通过 传入参数 求到任意项的值
// 假如 传入 6 得到结果 第六项的值
// 如果通过递归完成肯定用到这个公式 F(n)=F(n-1)+F(n-2)
function fbnqDg(n) {
if (n == 1 || n == 2) {
return 1;
}
return fbnqDg(n - 1) + fbnqDg(n - 2);
}
var f1 = fbnqDg(5);
// fbnqDg(4) + fbnqDg(3);
// fbnqDg(3) + fbnqDg(2) + fbnqDg(2) + fbnqDg(1);
// fbnqDg(2) + fbnqDg(1) + 1 + 1 + 1
// 1 + 1 + 1 + 1 + 1
console.log(f1); // 5
var f2 = fbnqDg(10);
console.log(f2); // 55
function fbnq(n) {
if (n == 1 || n == 2) {
return 1;
}
// 声明两个变量,初始的值为 第一项的值 和 第二项的值,都是 1
var a = 1;
var b = 1;
for (var i = 3; i <= n; i++) {
// 循环几就计算出第几项的值
var c = a + b;
// 将上一计算的第二项给到 a变量
a = b;
// 将上一次计算结果给到 b变量
b = c;
}
// 返回结果
return c;
}
var f3 = fbnq(5);
console.log(f3); // 5
var f4 = fbnq(8);
console.log(f4); // 21
// 使用 * 在页面输出倒直角三角形
// *******
// ******
// *****
// ****
// ***
// **
// *
function san1(n) {
for (var i = 1; i <= n; i++) {
// for(var j=n;j>=i;j--){
// document.write('*');
// }
for (var j = i; j <= n; j++) {
document.write('*');
}
document.write('<br>');
}
}
san1(6);
san1(10);
// 使用 * 在页面输出等腰三角形
// *
// ***
// *****
// *******
// *********
// ***********
function san2(n) {
for (var i = 1; i <= n; i++) {
for (var j = i; j <= n - 1; j++) {
document.write(' ');
}
for (var j = 1; j <= 2 * i - 1; j++) {
document.write('*');
}
document.write('<br>');
}
}
san2(6);