JS実現関数再帰・運用テクニック

2142 ワード

前言
再帰関数とは,関数内で本関数を呼び出すことである.再帰関数を使用すると、処理が適切でないとデッドサイクルに入ることに注意してください.再帰関数は、階乗問題など、特定の場合にのみ使用されます.
再帰計算階乗の例
 
 
     
         
        js         
         
            function f(num){ 
                if(num<1){ 
                    return 1; 
                }else{ 
                    return f(num-1)*num; 
                } 
            } 
         
     
     
         
            alert("10!    :"+f(10)); 
         
     
 

js再帰関数が自身を呼び出すときの保険方式
一般的な考え方
function fact(num){ 
    if (num<=1){ 
        return 1; 
    }else{ 
        return num*fact(num-1); 
    } 
} 
var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //  fact       ,    。 

arguments.calleeの使用
Arguments.calleeは、実行中の関数のポインタを指します.
警告:厳格モードでは、第5版ECMAScript(ES 5)はarguments.callee()の使用を禁止しています.関数自体を呼び出す必要がある場合は、arguments.callee()を使用しないでください.関数式に名前を付けるか、関数宣言を使用します.参照:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments/callee
function fact(num){ 
    if (num<=1){ 
        return 1; 
    }else{ 
        return num*arguments.callee(num-1); //     。 
    } 
} 
var anotherFact = fact; 
fact = null; 
alert(antherFact(4)); //   24. 

アリババの2015年の先端の試験問題
     fibonacci  ,             :
/**
 *@desc: fibonacci
 *@param: count {Number}
 *@return: result {Number}  count fibonacci ,   0  
  fibonacci   :[1, 1, 2, 3, 5, 8, 13, 21, 34 …]
   getNthFibonacci(0)    1
   getNthFibonacci(4)    5
 */
function getNthFibonacci(count) {
}

标题:
function fib(count) {
    //    
    var count = parseInt(count);
    if (isNaN(count) || count < 0) {
        return 0;
    }

    function f(count) {
        if (count <= 1)
            return 1;
        return arguments.callee(count - 1) + arguments.callee(count - 2);    //callee     ,   f  
    }
    return f(count);
}