クラシック再帰フェイス質問

細胞分裂

三時間後の分割娘細胞が死んでしまういったん細胞分裂の細胞分裂は、一度時間があります。それでは、どのくらいのn個の細胞の子?
この問題の核心は、 三个小时为一个周期

 

// 第アップ死ぬ行くための時間の期間ごとに3時間。
// 方法
// 最初の時間、細胞のみ、第二の時間、新しい細胞への細胞分裂、セルBへの細胞の元の状態、破片セルの状態第4時間、A、B、Cである細胞; 3時間目に、細胞は、細胞および新AのB細胞、B分割セルAへとC細胞細胞に分裂し続けます分割し、前法則に従って変化します。以下の結論
// 1時間前+ B + C A時間の初期状態
// 二時間幼若状態bのAの1時間前
// 成熟C bは前に3時間の1時間の状態
機能allCell( N-){
     // A細胞 
    Acellは=せ関数(N){
         IF(N - == 1 ){
             リターン 1。; 
        } {
             返す。。(Acell 1-N-)B細胞+(1-N-)CCELL +(1-N-。); 
        }
    } 
    // B态细胞 
    B細胞=せ関数{(N)の
         場合(N == 1 ){
             戻り 0 ; 
        } {
             戻り aCellを(N-1 )。
        } 
    } 
    // C态细胞 
    cCell =せ関数{(N)の
         場合(N == 1 || N == 2 ){
             戻り 0 ; 
        } {
             戻り B細胞を(N-1 )。
        } 
    } 
    戻り + aCell(N)+ B細胞(n)を(N)cCellを 
} 
はconsole.log(allCell( 10 ))
 // 方法II 
// この方法は、生存および死亡に分割される
機能細胞(時間){
     // 生細胞は、
    機能(時間)livecell {
         IF(時間<4 ){
             // の2 N-1へ電力増加なしで最初の3時間で細胞死
            リターン Math.pow(2、-hour。1 
        } {
             // 第四の時間は、細胞死を始め
            / / =時間、生細胞の前に生きた細胞-細胞死時間の
            リターン livecell(-hour 1。)* 2 - diecell(時間)
        } 
    } 
    // 細胞死
    関数はdiecell(時間){
         IF(時間<4 ){
             // なしの最初の3時間で細胞死
            戻り 0 
        } {
             // 三時間周期ため
            // すなわち(N-3)毎に3時間エンド細胞が死ぬ
            // 最初の2時間の最後の時間(N-1)+死細胞に、次いでH(N)+死細胞を(N-2)N-(細胞=前に3時間以内に死亡しました3)細胞生存
            戻り livecell(3時間) - diecell(-hour 1) - 。diecell(2時間
        } 
    } 
    戻りlivecell(時間)
} 
はconsole.log(セル( 10))

フィボナッチ数

また、ウサギとして知られている列の数が、ウサギの飼育は、例えば、このシリーズに来ている:1,1,2,3,5,8 ...第3の値の先頭を指し、各値は、最初の2つの値でありますそして、。
// 再帰 
    LETのA = 0 ;
     機能TU(NUM){ ++
         IF(|| NUM NUM 1 == == 2 ){
             リターン 1。
        } 
        NUMSをせ TU + TU(NUM-2 =(1-NUM。) 戻りNUMSを
    } 
    にconsole.log(TU( 8 )、A)
 // クロージャを解決
    @が配列中に存在する配列が既に存在する場合、ループは再び、それは、値の配列を返し、再帰関数が大幅に低減されます数
    VARの COUNT2 = 0 ;
     VARの FIBA =(関数(){
         VARの ARR = [0,1,1];    // ビット0の開始日から、プレースホルダであります
        返す 関数(N){ 
            COUNT2 ++ ;   
             VARの RES = ARR [N-]; 
             IF(RES){ // 現在ARRは、値を返す場合に 
                はconsole.log(RESを、 '----' 戻りRESを; 
            } { 
                にconsole.log(ARR [N-]、 '+++++' 
                ARR [N-] = FIBA FIBA +(2-N-(1-N-));
                 戻りARR [N-]; 
            }    
        } 
    })() ; 
    にconsole.log(FIBA( 8 )、COUNT2)
 // 正常
    // 一般的な循環は、この問題に最高のパフォーマンスを解決します。
    LETのA = 1 ; 
    LETのB = 1。
    LETのC; 
    機能TU(NUM){
         ため(; IはNUM-2 <I ++はI = 0 LET {)
            C = A + B; 
            A = B; 
            B = C 
        } 
        戻りC。
    } 
    にconsole.log(TU( 8))

64グリッド

グリッド64、第1グリッド配置小麦、二つの第二位は、3つ目は4 ...各二重フロントグリッドです。錠剤の数がありますか?
合計= 0を聞かせて
みましょう 1を= 
聞かせて終了 = 0 ;
関数トウ(){
     場合(エンド> = 64 ){
         戻り 
    }  + = 起動
    開始 * = 2  ++ 
    トウ()
} 
トウ()
はconsole.log(和)

再帰的な配列の高速ソート方法を使用して

この核となるアイデアは、中間値を取り、その後別に、別に大きな小、次いで両側に同じ操作を実行することである、すなわち、再帰です。
VaRの mysort = 関数(ARR){
     // 終了条件
    IF(arr.length <= 1 ){
         戻りARRは
    } 
    // 配列の中間値の基準値を見つける
    // 添字検索
    するvarセンター= Math.floorを(arr.length / 2 )
     VAR jZに= arr.splice(センター,. 1)[0 ]
     // 2つの空の配列を作成
    するvar左= []、右= [];
     // 配列をループ、及び比較
    のためにVAR I = 0;私は< arr.length; I ++は){
         IF(ARR [I] < jZに){ 
            left.push(ARR [I])
        } さもなければ {
            right.push(ARR [I])
        } 
    } 
    戻りmysort(左).concat([jZに]、mysort(右))
} 
はconsole.log(mysort([ 1,6,4,3,7,8,9] ))

九九

// 递归
関数NUM(NUMS){
     場合(NUMS == 1 ){ 
        にconsole.log( "1×1 = 1" 
    } { 
        NUM(NUMS -1 のためのVAR I = 1、STR = '';私は< = NUMS; iは++ ){ 
            STR + = '$ {I}はX $ {NUMS} =' + iはNUMS +」 '* 
        } 
        にconsole.log(STR)
    } 
} 
NUMを( 9 // 循环
ためVAR I = 1。私は10 <; iは++ ){ 
    STRを聞かせ = ''
     のためのVARJ = 1; J <10; J ++ ){
         場合(I> = J){ 
            STR + = '$ {J}は{I} =' + I * J + '$をxは
        } 
    } 
    にconsole.log(STR)
}

 

おすすめ

転載: www.cnblogs.com/gaobing1252/p/11110862.html