2017-08-12 7 views
0

私はJavaScriptを使用して、同じロボット歩行機能をしたいと思いますが、それはコールスタックサイズエラーを取得します。はエラーを超えましたか?

http://www.chegg.com/homework-help/questions-and-answers/robot-take-steps-1-2-3-meters-write-program-allows-shows-possible-steps-robot-take-using-r-q3756383

function walk(meter) { 
     if(meter < 0) { 
      count = 0; 
     } else if(meter <= 2) { 
      count = meter; 
     } else if(meter == 3) { 
      count = walk(meter-1)+walk(meter-2)+1; 
     } else { 
      count = walk(meter-1)+walk(meter-2)+walk(meter-3); 
     } 
     return count; 
    } 


    console.log(walk(100)); 
+0

?リンクに – guest271314

+0

xpected出力が所定の距離を移動するすべての可能な組み合わせである - しかし、このコードは、単一の値を出力する以下の答えが正しいか(それが正しい見ない)場合、そう要件 –

+0

にも近接していません - あなたの出力は1.803963808151009e + 26行の組み合わせになります - あなたはどれくらいの時間を持っていますか? –

答えて

1

あなたの複雑さは指数関数的であるので、それはコールスタックのサイズを超えてしまい、あなたは多項式の一つに指数時間の複雑さをひそかに役立ちますあなたの問題を解決するためにメモ化を使用することができ、今、このコードはOで実行されます(100)

結果が期待される何

\t let obj = {}; 
 
\t function walk(meter) { 
 
     if(meter < 0) { 
 
      count = 0; 
 
     } 
 
     else if(obj[meter] != undefined){ 
 
     \t return obj[meter]; 
 
     } else if(meter <= 2) { 
 
      count = meter; 
 
     } else if(meter == 3) { 
 
      count = walk(meter-1)+walk(meter-2)+1; 
 
     } else { 
 
      count = walk(meter-1)+walk(meter-2)+walk(meter-3); 
 
     } 
 
     obj[meter] = count; 
 
     return count; 
 
    } 
 

 

 
    console.log(walk(100));

+0

を参照してください@kphex – guest271314

+0

、唯一のOPはしかし100のために確認することができます – marvel308