1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
|
using System;
using System.Diagnostics;
namespace Factorielle
{
class Program
{
static void Main(string[] args)
{
Stopwatch sw = new Stopwatch();
ulong i, j;
Console.WriteLine("Methode Récursive (la plus factorisée, la moins optimisée)");
sw.Restart();
for (j = 0; j < 10000000; j++)
{
for (i = 0; i < 21; i++)
{
MethodeRecursive.Factorielle(i);
}
}
Console.WriteLine(sw.ElapsedMilliseconds + " ms");
Console.WriteLine("Methode Iterative (moins factorisée, plus optimisée)");
sw.Restart();
for (j = 0; j < 10000000; j++)
{
for (i = 0; i < 21; i++)
{
MethodeIterative.Factorielle(i);
}
}
Console.WriteLine(sw.ElapsedMilliseconds + " ms");
Console.WriteLine("Methode Déclarative (la moins factorisée, la plus optimisée)");
sw.Restart();
for (j = 0; j < 10000000; j++)
{
for (i = 0; i < 21; i++)
{
MethodeDeclarative.Factorielle(i);
}
}
Console.WriteLine(sw.ElapsedMilliseconds + " ms");
}
}
static class MethodeRecursive
{
public static ulong Factorielle(ulong i)
{
if (i > 20) return 0;
if (i <= 1)
{
return 1;
}
else
{
return i * Factorielle(--i);
}
}
}
static class MethodeIterative
{
public static ulong Factorielle(ulong i)
{
if (i > 20) return 0;
ulong res = 1;
while (i > 1)
{
res *= i--;
}
return res;
}
}
static class MethodeDeclarative
{
public static ulong Factorielle(ulong i)
{
return i switch
{
0 => 1,
1 => 1,
2 => 2,
3 => 6,
4 => 24,
5 => 120,
6 => 720,
7 => 5040,
8 => 40320,
9 => 362880,
10 => 3628800,
11 => 39916800,
12 => 479001600,
13 => 6227020800,
14 => 87178291200,
15 => 1307674368000,
16 => 20922789888000,
17 => 355687428096000,
18 => 6402373705728000,
19 => 121645100408832000,
20 => 2432902008176640000,
_ => 0,
};
}
}
} |
Partager