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 < 100000; i++) x += Fib(1000);
sp.Stop();
Console.WriteLine("recurse : {0}", sp.Elapsed);
sp = new Stopwatch();
sp.Start();
x = 0;
for (int i = 0; i < 100000; i++) x += Fibonachi(1000);
sp.Stop();
Console.WriteLine("loop : {0}", sp.Elapsed);
Console.ReadKey();
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnM7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwp1c2luZyBTeXN0ZW0uRGlhZ25vc3RpY3M7CnVzaW5nIFN5c3RlbS5JTzsKdXNpbmcgU3lzdGVtLkxpbnE7CgoKbmFtZXNwYWNlIENvbnNvbGVBcHAKewogICAgCiAgICBwdWJsaWMgY2xhc3MgUHJvZ3JhbQogICAgewogICAgICAgIHN0YXRpYyBpbnQgRmliUmVjKGludCBwMSwgaW50IHAyLCBpbnQgbikKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBuID09IDAgPyBwMSA6IEZpYlJlYyhwMiwgcDEgKyBwMiwgbiAtIDEpOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgaW50IEZpYihpbnQgbikgeyByZXR1cm4gRmliUmVjKDAsIDEsIG4pOyB9CgogICAgICAgIHN0YXRpYyBpbnQgRmlib25hY2hpKGludCBuLCBpbnQgcDEgPSAwLCBpbnQgcDIgPSAxKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKG4gPD0gMSkgcmV0dXJuIHAxOwogICAgICAgICAgICBpbnQgcDsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDI7IGogPCBuOyBqKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHAgPSBwMTsKICAgICAgICAgICAgICAgIHAxID0gcDI7CiAgICAgICAgICAgICAgICBwMiA9IHAyICsgcDsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcDI7CiAgICAgICAgfQoKICAgICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIE1haW4oc3RyaW5nW10gYXJncykKICAgICAgICB7CiAgICAgICAgICAgIHZhciBzcCA9IG5ldyBTdG9wd2F0Y2goKTsKICAgICAgICAgICAgc3AuU3RhcnQoKTsKICAgICAgICAgICAgaW50IHggPSAwOwogICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB4ICs9IEZpYigxMDAwKTsKICAgICAgICAgICAgc3AuU3RvcCgpOwogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgicmVjdXJzZSA6IHswfSIsIHNwLkVsYXBzZWQpOwogICAgICAgICAgICBzcCA9IG5ldyBTdG9wd2F0Y2goKTsKICAgICAgICAgICAgc3AuU3RhcnQoKTsKICAgICAgICAgICAgeCA9IDA7CiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHggKz0gRmlib25hY2hpKDEwMDApOwogICAgICAgICAgICBzcC5TdG9wKCk7CiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCJsb29wIDogezB9Iiwgc3AuRWxhcHNlZCk7CiAgICAgICAgICAgIENvbnNvbGUuUmVhZEtleSgpOwogICAgICAgIH0KCiAgICB9Cn0K