using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
namespace ConsoleApp
{
public class Program
{
static int FibRec(int p1, int p2, int n)
{
return n == 0 ? p1 : FibRec(p2, p1 + p2, n - 1);
}
static int Fib(int n) { return FibRec(0, 1, n); }
static int Fibonachi(int n, int p1 = 0, int p2 = 1)
{
if (n <= 1) return p1;
int p;
for (int j = 2; j < n; j++)
{
p = p1;
p1 = p2;
p2 = p2 + p;
}
return p2;
}
private static void Main(string[] args)
{
var sp = new Stopwatch();
sp.Start();
int x = 0;
for (int i = 0; i < 100; i++) x += Fib(100000);
sp.Stop();
Console.WriteLine("recurse : {0}", sp.Elapsed);
sp = new Stopwatch();
sp.Start();
x = 0;
for (int i = 0; i < 100; i++) x += Fibonachi(100000);
sp.Stop();
Console.WriteLine("loop : {0}", sp.Elapsed);
Console.ReadKey();
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CnVzaW5nIFN5c3RlbS5JTzsKdXNpbmcgU3lzdGVtLkxpbnE7CiAKIApuYW1lc3BhY2UgQ29uc29sZUFwcAp7CiAKcHVibGljIGNsYXNzIFByb2dyYW0KewpzdGF0aWMgaW50IEZpYlJlYyhpbnQgcDEsIGludCBwMiwgaW50IG4pCnsKcmV0dXJuIG4gPT0gMCA/IHAxIDogRmliUmVjKHAyLCBwMSArIHAyLCBuIC0gMSk7Cn0Kc3RhdGljIGludCBGaWIoaW50IG4pIHsgcmV0dXJuIEZpYlJlYygwLCAxLCBuKTsgfQogCnN0YXRpYyBpbnQgRmlib25hY2hpKGludCBuLCBpbnQgcDEgPSAwLCBpbnQgcDIgPSAxKQp7CmlmIChuIDw9IDEpIHJldHVybiBwMTsKaW50IHA7CmZvciAoaW50IGogPSAyOyBqIDwgbjsgaisrKQp7CnAgPSBwMTsKcDEgPSBwMjsKcDIgPSBwMiArIHA7Cn0KcmV0dXJuIHAyOwp9CiAKcHJpdmF0ZSBzdGF0aWMgdm9pZCBNYWluKHN0cmluZ1tdIGFyZ3MpCnsKdmFyIHNwID0gbmV3IFN0b3B3YXRjaCgpOwpzcC5TdGFydCgpOwppbnQgeCA9IDA7CmZvciAoaW50IGkgPSAwOyBpIDwgMTAwOyBpKyspIHggKz0gRmliKDEwMDAwMCk7CnNwLlN0b3AoKTsKQ29uc29sZS5Xcml0ZUxpbmUoInJlY3Vyc2UgOiB7MH0iLCBzcC5FbGFwc2VkKTsKc3AgPSBuZXcgU3RvcHdhdGNoKCk7CnNwLlN0YXJ0KCk7CnggPSAwOwpmb3IgKGludCBpID0gMDsgaSA8IDEwMDsgaSsrKSB4ICs9IEZpYm9uYWNoaSgxMDAwMDApOwpzcC5TdG9wKCk7CkNvbnNvbGUuV3JpdGVMaW5lKCJsb29wIDogezB9Iiwgc3AuRWxhcHNlZCk7CkNvbnNvbGUuUmVhZEtleSgpOwp9CiAKfQp9