Совершенно неправильно писать Фибоначчи с помощью рекурсивных методов!
Это старый известный пример того, как хороший/плохой Algorythm влияет на проект
если вы пишете Fibonatcci рекурсивным для вычисления 120
вам нужно 36 лет toget результат !!!!!!
public static int Fibonacci(int x)
{ // bad fibonacci recursive code
if (x <= 1)
return 1;
return Fibonacci(x - 1) + Fibonacci(x - 2);
}
в Dot Net 4.0 есть новое имя типа BigInteger, и вы можете использовать его, чтобы сделать лучшую функцию
с использованием системы; с использованием System.Collections.Generic; с использованием System.Numerics; // требуется ссылка. в этой сборке
namespace Fibonaci
{
public class CFibonacci
{
public static int Fibonacci(int x)
{
if (x <= 1)
return 1;
return Fibonacci(x - 1) + Fibonacci(x - 2);
}
public static IEnumerable<BigInteger> BigFib(Int64 toNumber)
{
BigInteger previous = 0;
BigInteger current = 1;
for (Int64 y = 1; y <= toNumber; y++)
{
var auxiliar = current;
current += previous;
previous = auxiliar;
yield return current;
}
}
}
}
и вы можете использовать его как
using System;
using System.Linq;
namespace Fibonaci
{
class Program
{
static void Main()
{
foreach (var i in CFibonacci.BigFib(10))
{
Console.WriteLine("{0}", i);
}
var num = 12000;
var fib = CFibonacci.BigFib(num).Last();
Console.WriteLine("fib({0})={1}", num, fib);
Console.WriteLine("Press a key...");
Console.ReadKey();
}
}
}
и в этом случае вы можете рассчитывать 12000
менее чем за секунду. так
Использование рекурсивной Митос не всегда хорошая идея
Над кодом импортируемого из Vahid Nasiri blog whiche wrote in Persian
Что именно вы имеете в виду «не Работа"? Что он делает, и что вы ожидали от этого? –