2016-03-18 61 views
2

正如標題所說,我正在嘗試構建一個函數,在該函數中,如果用戶輸入一個整數並獲得JavaScript警報,如果它是斐波那契數字或沒有硬編碼,則嘗試這到目前爲止,它的工作原理,但沒有一個算法可以使所有的斐波納契數字,而不是這些選定的數字?使用ASP.NET MVC的斐波那契算法JavaScript

代碼:

控制器:

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

你只是和發現斐波納契數列的前兩個數字。 0,1,* 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

確定一秒鐘,我會看看 – kemiller2002

+0

@AndreKoroshKordasti。將'var num = document.getElementById('fibonacciTextbox').value'更改爲'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

一個非常好的! – JCM

0

遞歸找到斐波那契系列 -

var recursive = function(n) { 
if(n <= 2) { 
    return 1; 
} else { 
    return this.recursive(n - 1) + this.recursive(n - 2); 
} 
};