阶乘和斐波那契数列,递归

346 阅读2分钟

阶乘

阶乘就是阶梯一样,从高往下乘,类如求5的阶乘:54321 公式 n * fn(n-1)

function Num(val) {
    if (val > 1) {
        return val * Num(val - 1)
    } else {
        return 1
    }
}
let result = Num(10)
console.log(result);

斐波那契数列

斐波那契数列的概念 斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。

斐波那契数列指的是这样一个数列: 0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181,6765,10946,17711……

它的规律是:这个数列从第 3 项开始,每一项都等于前两项之和。

// function f(value) {
//     if (value == 1 || value == 2) {
//         return 1
//     }
//     如果n != 1 && n != 2 进行递归运算
//     return f(value - 1) + f(value - 2)
// }
// let result = f(6)
// console.log(result);

什么是递归

递归简单来说就是在运行过程中不断调用自己,直到碰到终止条件,返回结果的过程。

递归可以看作两个过程,分别是递和归。递就是原问题把要计算的结果传给子问题;归则是子问题求出结果后,把结果层层返回原问题的过程。

// let arr1 = [
//     {
//         id: 1,
//         name: "水果",
//         price: 60,
//         children: [
//             {
//                 id: 11,
//                 name: "猕猴桃",
//                 price: 100,
//                 children: [
//                     { id: 5, name: "苹果", price: 600 },
//                     { id: 6, name: "梨", price: 300 },
//                     { id: 7, name: "葡萄", price: 100 },
//                 ],
//             },
//             {
//                 id: 12,
//                 name: "水蜜桃",
//                 price: 200,
//                 children: [
//                     { id: 8, name: "榴莲", price: 100 },
//                     { id: 9, name: "芒果", price: 2 },
//                     { id: 10, name: "菩提", price: 100 },
//                 ],
//             },
//         ],
//     },
//     {
//         id: 2,
//         name: "衣服",
//         price: 38,
//         children: [
//             {
//                 id: 21,
//                 name: "裙子",
//                 price: 100,
//                 children: [
//                     { id: 16, name: "短款", price: 600 },
//                     { id: 17, name: "长款", price: 300 },
//                     { id: 18, name: "定制款", price: 100 },
//                 ],
//             },
//             {
//                 id: 22,
//                 name: "裤子",
//                 price: 200,
//                 children: [
//                     { id: 19, name: "七分裤", price: 100 },
//                     { id: 20, name: "喇叭裤", price: 2 },
//                     { id: 21, name: "沙滩裤", price: 100 },
//                 ],
//             },
//         ],
//     },
//     {
//         id: 3,
//         name: "孜然拌饭",
//         price: 198,
//     },
//     {
//         id: 4,
//         name: "烤肉饭",
//         price: 998,
//     },
// ]
// let sum = 0; 
// let newArr = []
// function fn(Arr) {
//     Arr.forEach(item => {
//          newArr.push(item.price) //可以拿到每一项的钱
//         if (item.children instanceof Array) { //判断children是不是数组是的就继续递归
//             fn(item.children)
//         }
//     })
// }
// fn(arr1)
// for (let i = 0; i < newArr.length; i++){
//     sum+= newArr[i]
// }
// console.log(sum);