递归

251 阅读3分钟

递归:

  1. 一个函数自己调用自己
  2. 递归的时候一定要有一个结束条件,否则就会死循环下去 以致于浏览器卡死
  function fe() {
      console.log('fe')
      fe()
    }
      fe()
 // 利用递归让n 累加到10
   var n = 0
   function add() {
     if (n >= 10) {
       return
     }
     n++
     console.log(n)
     add()
   }
  
   // add函数每执行一次 就会让n递增一次
   
   // 利用递归思想 让add每次执行时 再调用一次自己(add())
   // 一直到n递增为10时候 就结束执行(return)


   // 求1 ~ 5 所有数的和 (从1到5 1 + 2 + 3 + 4 + 5)
   function sum(n) {
     if (n <= 1) {
       return 1
     }
       return n + sum(n - 1)
   }
   
   // sum(3) 1 + 2 + 3
   // R 3 + sum(3 - 1) => 3 + sum(2)
   // R 3 + 2 + sum(2 - 1) => 3 + 2 + sum(1)
   // R 3 + 2 + 1
   // 6


    function sum(n) {
      if (n <= 1) {
        return 1
      }
      return n + sum(n - 1)
    }
      console.log(sum(5)) // 15

   // sum(5)
   // R 5 + sum(5 - 1) => 5 + sum(4)
   // R 5 + 4 + sum(4 - 1) => 5 + 4 + sum(3)
   // R 5 + 4 + 3 + sum(3 - 1) => 5 + 4 + 3 + sum(2)
   // R 5 + 4 + 3 + 2 + sum(2 - 1) => 5 + 4 + 3 + 2 + sum(1)
   // R 5 + 4 + 3 + 2 + 1
   // R 15

   // 函数() 这个整体代表此次执行的返回值
   // n + sum(n - 1)
   // 用n加的 sum(n - 1)的返回值


    var total = 0
    for (var i = 1; i <= 5; i++) {
      total += i
    }
      console.log(total) // 15

    function add() {
      // 每次递增前 先判断下 如果n已经是10了 就不要再递增了
      if (n >= 10) { // 递归的结束条件
        return // 遇到return整个函数就结束了 后面代码也不会执行了
      }
        n++
        console.log(n)
        add()
    }

     for (var i = 0; i < 10; i++) {
        add()
    }
        console.log(n)
 <script>
   // function fe() {
   //   if (递归中止条件) {
   //     return
   //   }
   //   fe()
   // }
   // fe()

   // 1 ~ 5 求和
   function sum(n) {
     if (n <= 1) {
       return 1
     }
       return n + sum(n - 1)
   }
   console.log(sum(5))

   // sum(5) n = 5
   // R 5 + sum(5 - 1)
   // R 5 + 4 + sum(4 - 1)
   // R 5 + 4 + 3 + sum(3 - 1)
   // R 5 + 4 + 3 + 2 + sum(2 - 1)
   // R 5 + 4 + 3 + 2 + 1
   // R 15


    var total = 0
    for (var i = 1; i <= 5; i++) {
      total += i
    }
      console.log(total)

    // 求 1 ~ 100 能够被3整除被5整除的数 的和
    function sum(n) {
      if (n < 1) {
        return 0
      }

      // 如果当n的值能整除 就用n 累加 下一个值
      if (n % 15 === 0) {
       return n + sum(n - 1)
      }

      // 不能够被整除 直接看下一个值
      return sum(n - 1)
    }

    var total = 0
    for (var i = 1; i <= 100; i++) {
      if (i % 15 === 0) {
        total += i
      }
    }

   //  求 1 ~ 100 能够被3整除的数 的和
     function sum(n) {
       if (n < 1) {
         return 0
       }

   //  如果当n的值能整除 就用n 累加 下一个值
       if (n % 3 === 0) {
         return n + sum(n - 1)
       }

   //  不能够被整除 直接看下一个值
   //    return sum(n - 1)
   //  }
   //  console.log(sum(100)) // 1683


   // 求 1 ~ 100 能够被2整除的数 的和

    function sum(n) {
      if (n < 1) {
        return 0
      }

      if (n % 2 === 0) {
        return n + sum(n - 1)
      }

        return sum(n - 1)
    }
    console.log(sum(100)) // 2550

   // sum(100) n = 100
   // n + sum(n - 1) => 100 + sum(100 - 1)

   // 100 + sum(99) => 100 + sum(99 - 1)
   // 100 + 98 + sum(97) => 100 + 98 + sum(97 - 1)
   // 100 + 98 + 96 + sum(96 - 1)


    var total = 0
    for (var i = 1; i <= 100; i++) {
      if (i % 2 === 0) {
        total += i
      }
    }
    console.log(total) // 2550

 
   // 求1~100能够被2整除的数 的和 三元运算符方法
    var total=0;
    for(var i=0;i<=100;i++){
        !(i%2)?total+=i:null;
    }
    console.log(total);//2550

   // 求1~100能够被2整除的数 的和 for逻辑与方法
    var total=0;
       for(var i=0;i<=100;i++){
              !(i%2)&&(total+=i)
          }
    console.log(total);//2550
 </script>