国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JavaScript 遞歸(棧結構/化歸思想)

2019-11-06 06:12:45
字體:
來源:轉載
供稿:網友

遞歸(1)概念:函數自己調用自己(2)問題存在:容易出現死遞歸,是循環的遞歸下去,內存不夠就報錯:棧溢出
//1.直接調用自己function foo1(){    foo1();}foo1();
//2.間接調用自己function foo2(){    foo3();}function foo3(){    foo4();}function foo4(){    foo2();}foo2();棧結構特點:先入后出
function f1(){    f2();    console.log('f1 finish');}function f2(){    f3();    console.log('f2 finish');}function f3(){    console.log('f3 finish');}f1();//f3 finish     f2 finish     f1 finish//將函數調用稱為調用棧(3)遞歸要實現需要解決兩個問題1> 停止的條件(解決棧溢出)2> 如何調用自己(4) 化歸的思想(轉化為已歸納好的辦法):對問題進行變形、轉化,轉換成已經解決的問題,然后直接調用解決好的方法即可。所謂的遞歸其實就是化歸。(5)如何寫遞歸?1> 假設這個問題已經解決,即使寫一個空函數也假設已經解決2> 根據規律(可能要寫兩到三次),寫出化歸的表達式,即遞歸體3> 確定臨界條件案例:求1,3,5,7,...第n項的值,從0開始
//1> 假設問題已經解決,肯定需要一個函數,帶有一個參數,返回一個結果function foo(n){  }//2> 要求第n項,根據規律就是 第n-1項 + 2就是要求 第n-1項,即 foo(n-1) 就是結果因此得到函數體(遞歸體)function foo(n){     return foo(n-1) + 2;}//3> 確定臨界條件,就是在第0項的時候,值為1function foo(n){     if(n==0) return 1;    return foo(n-1) + 2;}
/** 練習1:求1,2,4,8,16, ...第n項的值,從0開始* *//*1.假設問題已解決,需要一個帶參的函數,有返回值*/function foo(n){    /*3.臨界條件:第0項時值為1*/    if(n==0) return 1;    /*2.規律是第n-1項乘以2*/    return foo(n-1)*2;}/** 練習2:求1到n的和* */function foo2(n){    if(n==1) return 1;    return foo2(n-1)+n;}/** 練習3:fibonacci數列,求第n項* */function foo3(n){    if( n==1 || n==2 ) return 1;    return foo3(n-1)+foo3(n-2);}/** 練習4:求階乘* */function foo4(n){    if(n==1) return 1;    return foo4(n-1)*n;}/** 練習5:求冪,就是n的m次方* */function foo5(n,m){    if(m==0) return 1;    return foo5(n,m-1)*n;}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亳州市| 庆元县| 永丰县| 辛集市| 平和县| 济源市| 习水县| 永新县| 土默特右旗| 上高县| 大邑县| 邻水| 德昌县| 屯昌县| 衡阳县| 顺昌县| 金山区| 铁岭市| 东光县| 乌什县| 祁阳县| 游戏| 庆安县| 益阳市| 桂东县| 上栗县| 庄河市| 宜黄县| 高要市| 新密市| 玉山县| 锡林郭勒盟| 平原县| 瓦房店市| 合水县| 锦州市| 河北省| 迁西县| 竹山县| 平阳县| 井陉县|