2016-03-18 6 views
2

タイトルによれば、ユーザーが整数を入力し、フィボナッチ数またはハードコードなしでJavaScriptアラートを取得する機能を構築しようとしています。これまでのところ、それは動作しますが、これらの選択されたものの代わりにすべてのフィボナッチ数を作ることができるアルゴリズムはありませんか?ASP.NET MVCを使用したフィボナッチアルゴリズム

コード:

コントローラー:

using System; 
using System.Linq; 
using System.Web.Mvc; 
using System.Xml.Linq; 
using Andre_Kordasti___Programmeringsuppgift.Models; 

namespace Andre_Kordasti___Programmeringsuppgift.Controllers 
{ 
    public class HomeController : Controller 
    { 

    public ActionResult Fibonacci() 
     { 
      return View(); 
     } 
    } 
} 

ビュー:

@{ 
    Layout = "~/Views/Shared/_Layout.cshtml"; 
} 

<h2>Fibonacci</h2> 

<input class="form-control" type="text" name="fibonacciTextbox" id="fibonacciTextbox" /> 
<br /> 
<button class="btn btn-primary" onclick="fibonacciFunction()">Sök</button> 

はJavaScript:

function fibonacciFunction() 
{ 
    var num = document.getElementById('fibonacciTextbox').value 

    function isFibonacci(num) 
    { 
     var first = 0; 
     var second = 1; 
     var third = first + second; 

     if (num === first) 
     { 
      return true; 
      alert('Fibonacci Number!') 
     } 

     while (third <= num) 
     { 
      if (third === num) 
      { 
       alert('Fibonacci Number!') 
       return true; 
      } 

      first = second; 
      second = third; 
      third = first + second; 
     } 

     alert('Not Fibonacci Number!') 

     return false; 
    } 
} 
+3

をSERIES-見つけます。 012 * 1 * * 2 * 3 * * 5 * * 8 * * 13 * * 21 * * 34 * ... – JCM

+1

自分自身を再帰的に呼び出す関数を作成することができます。 –

+0

コードを編集しましたが、それでも動作しません。何が間違っていましたか? –

答えて

2

フィボナッチ数列は、前の二つの数字の組み合わせです。あなたはあなたの番号にそれを計算することができ、それはその配列の一部である場合、それは次のとおりです。

function isFibonacci (num){ 
    var first = 0; 
    var second = 1; 
    var third = first + second; 

    if(num === first){return true;}  

    while(third <= num) 
    { 
    if(third === num) 
    { 
     return true; 
    } 

    first = second; 
    second = third; 
    third = first + second; 
    } 

    return false; 

} 

https://jsfiddle.net/04m4t9av/1/

+0

私はこれを行い、それがうまくいかず、JavaScriptコードを編集しました。下に見てください。どうしましたか? –

+0

ok 1秒と私は見てみよう – kemiller2002

+0

@AndreKoroshKordasti。値を 'var num = + document.getElementById( 'fibonacciTextbox')。value;'に変更し、実行する関数を呼び出します: 'isFibonacci(num);' at終了 –

4

フィボナッチ数があれば(5 *の結果を確認することで決定さN *することができますn + 4)または(5 * n * n - 4)またはその両方が完全な正方形です。

function isFibonacci(num) { 
    return isPerfectSquare(5*num*num + 4) || isPerfectSquare(5*num*num - 4); 
} 

function isPerfectSquare(n) { 
    return Math.sqrt(n) % 1 === 0; 
} 

注:再帰関数を実行またはループを作成することによってこれを行うための方法がありますが、これらの方法は、多数のため非効率的な証明します。

+0

本当に素晴らしい1つ! – JCM

0

再帰的フィボナッチはあなただけの合計で前の2つの数字をフィボナッチ数列を見つける

var recursive = function(n) { 
if(n <= 2) { 
    return 1; 
} else { 
    return this.recursive(n - 1) + this.recursive(n - 2); 
} 
}; 
関連する問題