日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript中递归使用

發布時間:2023/12/20 javascript 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript中递归使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

遞歸的概念

  • 在程序中函數直接或間接調用自己
  • 直接調用自己
  • 簡介調用自己
  • 跳出結構,有了跳出才有結果

遞歸的思想

  • 遞歸的調用,最終還是要轉換為自己這個函數
  • 如果有個函數foo,如果他是遞歸函數,到最后問題還是轉換為函數foo的形式
  • 遞歸的思想就是將一個未知問題轉換為一個已解決的問題來實現

遞歸的步驟(技巧)

1. 假設遞歸函數已經寫好 2. 尋找遞推關系 3. 將遞推關系的結構轉換為遞歸體 4. 將臨界條件加入到遞歸體中7你

簡單遞歸練習

求1-100的和

  • 分析:

  • 假設遞歸函數已經寫好為sum,既sum(100),就是求1-100的和
  • 尋找遞推關系: 就是 n 與 n-1 ,或 n-2 之間的關系
    sum(n) == sum(n-1) + n

    1 var res = sum(100); 2 var res = sum(99) + 100;
  • 將遞歸結構轉換成遞歸體

    1 function sum(n){ 2 return sum(n-1) + n; 3 }
  • 將臨界條件加入到遞歸中
    • 求100 轉換為 求99
    • 求99 轉換為 求98
    • 求98 轉換為 求97
    • ...
    • 求2 轉換為 求1
    • 求1 轉換為 求1
    • 即 sum(1) = 1
  •   遞歸函數

    1 function sum(n){ 2 if(n==1) return 1; 3 return sum(n-1) + n; 4 }
  • 求出斐波那契數列

      1,1,2,3,5,8,13,21,34,55,89...求第 n 項

    • 分析:

  • 假設已知 fib(n) 為第 n 項
  • 遞歸關系 * fib(n) = fib(n-1) + fib(n-2)
  • 遞歸體
  • 1 function fib(n){ 2 return fib(n-1)+fib(n-2); 3 } 4. 臨界條件fib(0) == 1fib(1) == 1 5. 遞歸函數
    1 function fib(n){ 2 if(n == 0 || n ==1) return 1; 3 return fib(n-1) + fib(n-2); 4 }

    拷貝,使用遞歸方式(面試的時候有可能會問到)

    (潘明老師:http://risky.love/2016/10/08/JavaScript%E6%B7%B1%E6%8B%B7%E8%B4%9D%E5%AE%9E%E7%8E%B0/)

    • 分析
  • 什么是拷貝
  • 如果拷貝的時候, 只針對當前對象的屬性進行拷貝, 而屬性是引用類型這個不考慮, 那么就是淺拷貝
  • 如果拷貝的時候, 將數據的所有引用結構都拷貝一份, 那么數據在內存中獨立就是深拷貝(內存隔離,完全獨立)
  • 拷貝: 復制一份. 指將對象數據復制.
  • 在討論深拷與淺拷的時候一定要保證對象的屬性也是引用類型.
  • 實現方法:
  • 如果要實現深拷貝那么就需要考慮將對象的屬性, 與屬性的屬性,都拷貝過來
  • 2個參數,簡單實現
  • 假設已經實現 clone ( o1, o2),將對象 o2 的成員拷貝一份交給 o1
  • 遞推關系
  • 混合方法,將 o2 的成員拷貝到 o1 中
  • 1 function clone( o1, o2){ 2 for(var key in o2){ 3 o1[key] = o2[key]; 4 } 5 }

          * 假設方法已經實現,如果 o2[key] 是對象

          * 繼續使用這個方法

          * 需要考慮 o2[key] 是引用類型,再一次使用clone函數

          * 如果 o2[key] 不是引用類型,那么直接賦值

          4.臨界條件

            * 因為是 for in 循環,沒有成員遍歷時,自動結束

          5. 遞歸函數

    1 function clone(o1,o2){ 2 for(var key in o2){ 3 if(typeof o2[key] == 'object'){ 4 o1[key] = {}; 5 clone(o1[key],o2[key]) 6 }else{ 7 o1[key] = o2[key]; 8 } 9 } 10 }

      4.復雜實現(一個參數)

        原理: clone(o) = new Object;

        返回一個對象 遞歸函數

    1 function clone(o){ 2 var temp = {}; 3 for(var key in o){ 4 if(typeof o[key] == 'object'){ 5 temp[key] = clone(o[key]); 6 }else{ 7 temp[key] = o[key]; 8 } 9 } 10 return temp; 11 }

    使用遞歸實現 getElementsByClassName

    • 分析

        1. 實現一個方法byClass()需要的參數是: node: 在某個節點上尋找元素 className: 需要尋找的className arr: 找到的元素存儲到這個數組中

        2. 遍歷 node 的子節點,

        3. 查看這個子節點是否還有子節點,如果沒有直接存儲到數組中,如果有就繼續遞歸

    1 var arr = []; 2 function byClass(node, className, arr){ 3 //得到傳入節點的所有子節點 4 var lists = node.childNodes; 5 for(var i = 0;i< lists.length;i++){ 6 //判斷是否有相同className元素 7 if(arr[i],className == className){ 8 arr.push(arr[i]); 9 } 10 //判斷子節點是否還有子節點 11 if(arr[i].childNodes.length > 0){ 12 byClass(arr[i],className,arr); 13 } 14 } 15 }
    • 總結:

        js遞歸通俗的理解:所謂的遞歸函數就是在函數體內調用本函數。使用遞歸函數一定要注意,要有結束條件,處理不當就會進入死循環.

    轉載于:https://www.cnblogs.com/zwy-choo/p/6705429.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的JavaScript中递归使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。