28
loading...
This website collects cookies to deliver better user experience
private static long RecursiveFib(long n)
{
if (n <= 1)
{
return n;
}
return RecursiveFib(n - 1) + RecursiveFib(n - 2);
}
private static long IterativeFib(long n)
{
var a = 0L;
var b = 1L;
if (n == 0)
{
return a;
}
for (var i = 1; i < n; i++)
{
var c = a + b;
a = b;
b = c;
}
return b;
}
private static long TailRecursiveFib(long n, long a , long b )
{
return n switch
{
0 => a,
1 => b,
_ => TailRecursiveFib(n - 1, b, a + b)
};
}
using System;
using System.Diagnostics;
namespace TailRecursion
{
static class Program
{
private static long TailRecursiveFib(long n, long a , long b )
{
return n switch
{
0 => a,
1 => b,
_ => TailRecursiveFib(n - 1, b, a + b)
};
}
private static long RecursiveFib(long n)
{
if (n <= 1)
{
return n;
}
return RecursiveFib(n - 1) + RecursiveFib(n - 2);
}
private static long IterativeFib(long n)
{
var a = 0L;
var b = 1L;
if (n == 0)
{
return a;
}
for (var i = 1; i < n; i++)
{
var c = a + b;
a = b;
b = c;
}
return b;
}
private static void Main(string[] args)
{
var st = new Stopwatch();
var r = new Random();
for (var i = 0; i < 5; i++)
{
RecursiveFib(i);
IterativeFib(i * 10 );
TailRecursiveFib(i * 10, 0, 1);
}
long result = 0;
st.Restart();
// result = RecursiveFib(10);
result = TailRecursiveFib(100, 0, 1);
// result = IterativeFib(100);
st.Stop();
Console.WriteLine("Elapsed ticks: {0}", st.ElapsedTicks);
Console.WriteLine(result);
}
}
}
28