diff --git a/.gitignore b/.gitignore
index b883f1f..a691bdd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,9 @@
*.exe
+
+# .NET build artifacts
+bin/
+obj/
+*.dll
+*.pdb
+*.deps.json
+*.runtimeconfig.json
diff --git a/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj b/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj
new file mode 100644
index 0000000..10e94ed
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj
@@ -0,0 +1,11 @@
+
+
+
+ Exe
+ net8.0
+ _2021_09_22_C_
+ enable
+ enable
+
+
+
diff --git a/Fibonacci/2021-09-22 C#/Fibonacci.cs b/Fibonacci/2021-09-22 C#/Program.cs
similarity index 100%
rename from Fibonacci/2021-09-22 C#/Fibonacci.cs
rename to Fibonacci/2021-09-22 C#/Program.cs
diff --git a/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C# b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#
new file mode 100755
index 0000000..f21ddac
Binary files /dev/null and b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C# differ
diff --git a/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.deps.json b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.deps.json
new file mode 100644
index 0000000..6742828
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.deps.json
@@ -0,0 +1,23 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v8.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v8.0": {
+ "2021-09-22 C#/1.0.0": {
+ "runtime": {
+ "2021-09-22 C#.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "2021-09-22 C#/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.dll b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.dll
new file mode 100644
index 0000000..48681e5
Binary files /dev/null and b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.dll differ
diff --git a/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.pdb b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.pdb
new file mode 100644
index 0000000..123259e
Binary files /dev/null and b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.pdb differ
diff --git a/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.runtimeconfig.json b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.runtimeconfig.json
new file mode 100644
index 0000000..becfaea
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.runtimeconfig.json
@@ -0,0 +1,12 @@
+{
+ "runtimeOptions": {
+ "tfm": "net8.0",
+ "framework": {
+ "name": "Microsoft.NETCore.App",
+ "version": "8.0.0"
+ },
+ "configProperties": {
+ "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
+ }
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.dgspec.json b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.dgspec.json
new file mode 100644
index 0000000..1e333a1
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.dgspec.json
@@ -0,0 +1,61 @@
+{
+ "format": 1,
+ "restore": {
+ "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj": {}
+ },
+ "projects": {
+ "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj",
+ "projectName": "2021-09-22 C#",
+ "projectPath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj",
+ "packagesPath": "/home/runner/.nuget/packages/",
+ "outputPath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "/home/runner/.nuget/NuGet/NuGet.Config"
+ ],
+ "originalTargetFrameworks": [
+ "net8.0"
+ ],
+ "sources": {
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.117/PortableRuntimeIdentifierGraph.json"
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.props b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.props
new file mode 100644
index 0000000..cf7e7b6
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.props
@@ -0,0 +1,15 @@
+
+
+
+ True
+ NuGet
+ $(MSBuildThisFileDirectory)project.assets.json
+ /home/runner/.nuget/packages/
+ /home/runner/.nuget/packages/
+ PackageReference
+ 6.8.1
+
+
+
+
+
\ No newline at end of file
diff --git a/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.targets b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.targets
new file mode 100644
index 0000000..3dc06ef
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/2021-09-22 C#.csproj.nuget.g.targets
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
new file mode 100644
index 0000000..2217181
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs
@@ -0,0 +1,4 @@
+//
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v8.0", FrameworkDisplayName = ".NET 8.0")]
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfo.cs b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfo.cs
new file mode 100644
index 0000000..b8e09f5
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfo.cs
@@ -0,0 +1,22 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+using System;
+using System.Reflection;
+
+[assembly: System.Reflection.AssemblyCompanyAttribute("2021-09-22 C#")]
+[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
+[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
+[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+abb7ef72f162c06828283df39232638f96675ac2")]
+[assembly: System.Reflection.AssemblyProductAttribute("2021-09-22 C#")]
+[assembly: System.Reflection.AssemblyTitleAttribute("2021-09-22 C#")]
+[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
+
+// Generated by the MSBuild WriteCodeFragment class.
+
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfoInputs.cache b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfoInputs.cache
new file mode 100644
index 0000000..84f41f5
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfoInputs.cache
@@ -0,0 +1 @@
+f8bc1392cd5f568c63ad3f375e6fcaf3396f698bfb62b76bd8b06be1dc70cb51
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GeneratedMSBuildEditorConfig.editorconfig b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GeneratedMSBuildEditorConfig.editorconfig
new file mode 100644
index 0000000..734989b
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GeneratedMSBuildEditorConfig.editorconfig
@@ -0,0 +1,13 @@
+is_global = true
+build_property.TargetFramework = net8.0
+build_property.TargetPlatformMinVersion =
+build_property.UsingMicrosoftNETSdkWeb =
+build_property.ProjectTypeGuids =
+build_property.InvariantGlobalization =
+build_property.PlatformNeutralAssembly =
+build_property.EnforceExtendedAnalyzerRules =
+build_property._SupportedPlatformList = Linux,macOS,Windows
+build_property.RootNamespace = _2021_09_22_C_
+build_property.ProjectDir = /home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/
+build_property.EnableComHosting =
+build_property.EnableGeneratedComInterfaceComImportInterop =
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GlobalUsings.g.cs b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GlobalUsings.g.cs
new file mode 100644
index 0000000..8578f3d
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GlobalUsings.g.cs
@@ -0,0 +1,8 @@
+//
+global using global::System;
+global using global::System.Collections.Generic;
+global using global::System.IO;
+global using global::System.Linq;
+global using global::System.Net.Http;
+global using global::System.Threading;
+global using global::System.Threading.Tasks;
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.assets.cache b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.assets.cache
new file mode 100644
index 0000000..1d76457
Binary files /dev/null and b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.assets.cache differ
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.CoreCompileInputs.cache b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.CoreCompileInputs.cache
new file mode 100644
index 0000000..216b840
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.CoreCompileInputs.cache
@@ -0,0 +1 @@
+ef67cc630d4657c3fb26a509d9385ffa015070e4255114986cba43a30e6783db
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.FileListAbsolute.txt b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.FileListAbsolute.txt
new file mode 100644
index 0000000..5a5dcfc
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.FileListAbsolute.txt
@@ -0,0 +1,15 @@
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.GeneratedMSBuildEditorConfig.editorconfig
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfoInputs.cache
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.AssemblyInfo.cs
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.csproj.CoreCompileInputs.cache
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.sourcelink.json
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.deps.json
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.runtimeconfig.json
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.dll
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/bin/Debug/net8.0/2021-09-22 C#.pdb
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.dll
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/refint/2021-09-22 C#.dll
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.pdb
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.genruntimeconfig.cache
+/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/ref/2021-09-22 C#.dll
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.dll b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.dll
new file mode 100644
index 0000000..48681e5
Binary files /dev/null and b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.dll differ
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.genruntimeconfig.cache b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.genruntimeconfig.cache
new file mode 100644
index 0000000..bff1ac1
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.genruntimeconfig.cache
@@ -0,0 +1 @@
+f0f9ec1db6b19a3c3f09a957fde7ed754c62098ebc1ee37058f2f20a7efed20c
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.pdb b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.pdb
new file mode 100644
index 0000000..123259e
Binary files /dev/null and b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.pdb differ
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.sourcelink.json b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.sourcelink.json
new file mode 100644
index 0000000..3d1dab6
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/2021-09-22 C#.sourcelink.json
@@ -0,0 +1 @@
+{"documents":{"/home/runner/work/ProgrammingPractice/ProgrammingPractice/*":"https://raw.githubusercontent.com/svoff/ProgrammingPractice/abb7ef72f162c06828283df39232638f96675ac2/*"}}
\ No newline at end of file
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/apphost b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/apphost
new file mode 100755
index 0000000..f21ddac
Binary files /dev/null and b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/apphost differ
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/ref/2021-09-22 C#.dll b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/ref/2021-09-22 C#.dll
new file mode 100644
index 0000000..c3edd0f
Binary files /dev/null and b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/ref/2021-09-22 C#.dll differ
diff --git a/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/refint/2021-09-22 C#.dll b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/refint/2021-09-22 C#.dll
new file mode 100644
index 0000000..c3edd0f
Binary files /dev/null and b/Fibonacci/2021-09-22 C#/obj/Debug/net8.0/refint/2021-09-22 C#.dll differ
diff --git a/Fibonacci/2021-09-22 C#/obj/project.assets.json b/Fibonacci/2021-09-22 C#/obj/project.assets.json
new file mode 100644
index 0000000..bbd8768
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/project.assets.json
@@ -0,0 +1,66 @@
+{
+ "version": 3,
+ "targets": {
+ "net8.0": {}
+ },
+ "libraries": {},
+ "projectFileDependencyGroups": {
+ "net8.0": []
+ },
+ "packageFolders": {
+ "/home/runner/.nuget/packages/": {}
+ },
+ "project": {
+ "version": "1.0.0",
+ "restore": {
+ "projectUniqueName": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj",
+ "projectName": "2021-09-22 C#",
+ "projectPath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj",
+ "packagesPath": "/home/runner/.nuget/packages/",
+ "outputPath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/obj/",
+ "projectStyle": "PackageReference",
+ "configFilePaths": [
+ "/home/runner/.nuget/NuGet/NuGet.Config"
+ ],
+ "originalTargetFrameworks": [
+ "net8.0"
+ ],
+ "sources": {
+ "https://api.nuget.org/v3/index.json": {}
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "projectReferences": {}
+ }
+ },
+ "warningProperties": {
+ "warnAsError": [
+ "NU1605"
+ ]
+ }
+ },
+ "frameworks": {
+ "net8.0": {
+ "targetAlias": "net8.0",
+ "imports": [
+ "net461",
+ "net462",
+ "net47",
+ "net471",
+ "net472",
+ "net48",
+ "net481"
+ ],
+ "assetTargetFallback": true,
+ "warn": true,
+ "frameworkReferences": {
+ "Microsoft.NETCore.App": {
+ "privateAssets": "all"
+ }
+ },
+ "runtimeIdentifierGraphPath": "/usr/lib/dotnet/sdk/8.0.117/PortableRuntimeIdentifierGraph.json"
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/2021-09-22 C#/obj/project.nuget.cache b/Fibonacci/2021-09-22 C#/obj/project.nuget.cache
new file mode 100644
index 0000000..077248a
--- /dev/null
+++ b/Fibonacci/2021-09-22 C#/obj/project.nuget.cache
@@ -0,0 +1,8 @@
+{
+ "version": 2,
+ "dgSpecHash": "eHIM71Xf3bmCoZhgp1n/z44co9aBxijVqDhBLVD5dKAOL5CqL4xm4pTTE3jTb7LpuI/qPk+9DBVCSD04e2d6sQ==",
+ "success": true,
+ "projectFilePath": "/home/runner/work/ProgrammingPractice/ProgrammingPractice/Fibonacci/2021-09-22 C#/2021-09-22 C#.csproj",
+ "expectedPackageFiles": [],
+ "logs": []
+}
\ No newline at end of file
diff --git a/Fibonacci/Multiple-Implementations/FibonacciBenchmark/FibonacciBenchmark.csproj b/Fibonacci/Multiple-Implementations/FibonacciBenchmark/FibonacciBenchmark.csproj
new file mode 100644
index 0000000..14494cb
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciBenchmark/FibonacciBenchmark.csproj
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+ Exe
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Fibonacci/Multiple-Implementations/FibonacciBenchmark/Program.cs b/Fibonacci/Multiple-Implementations/FibonacciBenchmark/Program.cs
new file mode 100644
index 0000000..0e27a77
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciBenchmark/Program.cs
@@ -0,0 +1,102 @@
+using System.Diagnostics;
+using FibonacciImplementations;
+
+namespace FibonacciBenchmark;
+
+class Program
+{
+ static void Main(string[] args)
+ {
+ Console.WriteLine("Fibonacci Implementations Benchmark");
+ Console.WriteLine("====================================");
+ Console.WriteLine();
+
+ var implementations = new List
+ {
+ new IterativeFibonacci(),
+ new MemoizedFibonacci(),
+ new DynamicProgrammingFibonacci(),
+ new MatrixFibonacci(),
+ new RecursiveFibonacci() // Last because it's slowest
+ };
+
+ // Test different input sizes
+ var testCases = new[] { 10, 20, 30, 35 };
+
+ foreach (var n in testCases)
+ {
+ Console.WriteLine($"Calculating Fibonacci({n}):");
+ Console.WriteLine("Implementation".PadRight(25) + "Result".PadRight(15) + "Time (ms)");
+ Console.WriteLine(new string('-', 50));
+
+ foreach (var implementation in implementations)
+ {
+ // Skip recursive for large numbers to avoid excessive wait time
+ if (implementation is RecursiveFibonacci && n > 35)
+ {
+ Console.WriteLine($"{implementation.Name}".PadRight(25) + "SKIPPED".PadRight(15) + "(too slow)");
+ continue;
+ }
+
+ var stopwatch = Stopwatch.StartNew();
+ long result;
+
+ try
+ {
+ result = implementation.Calculate(n);
+ stopwatch.Stop();
+
+ Console.WriteLine($"{implementation.Name}".PadRight(25) +
+ $"{result}".PadRight(15) +
+ $"{stopwatch.ElapsedMilliseconds:F2}");
+ }
+ catch (Exception ex)
+ {
+ stopwatch.Stop();
+ Console.WriteLine($"{implementation.Name}".PadRight(25) +
+ "ERROR".PadRight(15) +
+ $"{ex.Message}");
+ }
+ }
+
+ Console.WriteLine();
+ }
+
+ // Performance comparison for moderate-sized numbers
+ Console.WriteLine("Performance Comparison (average over 100 runs):");
+ Console.WriteLine("================================================");
+
+ const int testN = 25;
+ const int iterations = 100;
+
+ Console.WriteLine($"Calculating Fibonacci({testN}) - Average over {iterations} iterations:");
+ Console.WriteLine("Implementation".PadRight(25) + "Average Time (ms)");
+ Console.WriteLine(new string('-', 45));
+
+ foreach (var implementation in implementations)
+ {
+ if (implementation is RecursiveFibonacci)
+ {
+ // Skip recursive for performance test as it's too slow
+ Console.WriteLine($"{implementation.Name}".PadRight(25) + "SKIPPED (too slow)");
+ continue;
+ }
+
+ var totalTime = 0.0;
+
+ for (int i = 0; i < iterations; i++)
+ {
+ var stopwatch = Stopwatch.StartNew();
+ implementation.Calculate(testN);
+ stopwatch.Stop();
+ totalTime += stopwatch.Elapsed.TotalMilliseconds;
+ }
+
+ var averageTime = totalTime / iterations;
+ Console.WriteLine($"{implementation.Name}".PadRight(25) + $"{averageTime:F4}");
+ }
+
+ Console.WriteLine();
+ Console.WriteLine("Note: Recursive implementation is excluded from larger tests due to exponential time complexity.");
+ }
+}
diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations.sln b/Fibonacci/Multiple-Implementations/FibonacciImplementations.sln
new file mode 100644
index 0000000..22ec6ca
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations.sln
@@ -0,0 +1,34 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31903.59
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FibonacciImplementations", "FibonacciImplementations\FibonacciImplementations.csproj", "{14C60D42-1396-487E-93EA-40A0C841F6DA}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FibonacciTests", "FibonacciTests\FibonacciTests.csproj", "{F62A15A4-5A47-4599-9164-17C7EF43F559}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FibonacciBenchmark", "FibonacciBenchmark\FibonacciBenchmark.csproj", "{E09968E5-98F3-4E95-A670-246435C923E5}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {14C60D42-1396-487E-93EA-40A0C841F6DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {14C60D42-1396-487E-93EA-40A0C841F6DA}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {14C60D42-1396-487E-93EA-40A0C841F6DA}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {14C60D42-1396-487E-93EA-40A0C841F6DA}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F62A15A4-5A47-4599-9164-17C7EF43F559}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F62A15A4-5A47-4599-9164-17C7EF43F559}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F62A15A4-5A47-4599-9164-17C7EF43F559}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F62A15A4-5A47-4599-9164-17C7EF43F559}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E09968E5-98F3-4E95-A670-246435C923E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E09968E5-98F3-4E95-A670-246435C923E5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E09968E5-98F3-4E95-A670-246435C923E5}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E09968E5-98F3-4E95-A670-246435C923E5}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/DynamicProgrammingFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/DynamicProgrammingFibonacci.cs
new file mode 100644
index 0000000..d11aed7
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/DynamicProgrammingFibonacci.cs
@@ -0,0 +1,29 @@
+namespace FibonacciImplementations;
+
+///
+/// Dynamic programming (bottom-up) implementation of Fibonacci calculation
+/// Time complexity: O(n)
+/// Space complexity: O(n) for the array
+///
+public class DynamicProgrammingFibonacci : IFibonacci
+{
+ public string Name => "Dynamic Programming";
+
+ public long Calculate(int n)
+ {
+ if (n < 0) throw new ArgumentException("n must be non-negative");
+ if (n == 0) return 0;
+ if (n == 1) return 1;
+
+ var dp = new long[n + 1];
+ dp[0] = 0;
+ dp[1] = 1;
+
+ for (int i = 2; i <= n; i++)
+ {
+ dp[i] = dp[i - 1] + dp[i - 2];
+ }
+
+ return dp[n];
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/FibonacciImplementations.csproj b/Fibonacci/Multiple-Implementations/FibonacciImplementations/FibonacciImplementations.csproj
new file mode 100644
index 0000000..fa71b7a
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/FibonacciImplementations.csproj
@@ -0,0 +1,9 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+
+
diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/IFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/IFibonacci.cs
new file mode 100644
index 0000000..56482ff
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/IFibonacci.cs
@@ -0,0 +1,19 @@
+namespace FibonacciImplementations;
+
+///
+/// Interface for Fibonacci number calculation implementations
+///
+public interface IFibonacci
+{
+ ///
+ /// Calculate the nth Fibonacci number
+ ///
+ /// The position in the Fibonacci sequence (0-based)
+ /// The nth Fibonacci number
+ long Calculate(int n);
+
+ ///
+ /// Name of the implementation for identification
+ ///
+ string Name { get; }
+}
diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/IterativeFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/IterativeFibonacci.cs
new file mode 100644
index 0000000..4994e76
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/IterativeFibonacci.cs
@@ -0,0 +1,31 @@
+namespace FibonacciImplementations;
+
+///
+/// Iterative implementation of Fibonacci calculation
+/// Time complexity: O(n)
+/// Space complexity: O(1)
+///
+public class IterativeFibonacci : IFibonacci
+{
+ public string Name => "Iterative";
+
+ public long Calculate(int n)
+ {
+ if (n < 0) throw new ArgumentException("n must be non-negative");
+ if (n == 0) return 0;
+ if (n == 1) return 1;
+
+ long prev2 = 0;
+ long prev1 = 1;
+ long current = 0;
+
+ for (int i = 2; i <= n; i++)
+ {
+ current = prev1 + prev2;
+ prev2 = prev1;
+ prev1 = current;
+ }
+
+ return current;
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/MatrixFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/MatrixFibonacci.cs
new file mode 100644
index 0000000..cfae686
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/MatrixFibonacci.cs
@@ -0,0 +1,50 @@
+namespace FibonacciImplementations;
+
+///
+/// Matrix exponentiation implementation of Fibonacci calculation
+/// Time complexity: O(log n)
+/// Space complexity: O(log n) due to recursion in matrix exponentiation
+///
+public class MatrixFibonacci : IFibonacci
+{
+ public string Name => "Matrix Exponentiation";
+
+ public long Calculate(int n)
+ {
+ if (n < 0) throw new ArgumentException("n must be non-negative");
+ if (n == 0) return 0;
+ if (n == 1) return 1;
+
+ var baseMatrix = new long[,] { { 1, 1 }, { 1, 0 } };
+ var result = MatrixPower(baseMatrix, n - 1);
+
+ return result[0, 0];
+ }
+
+ private long[,] MatrixPower(long[,] matrix, int power)
+ {
+ if (power == 1)
+ {
+ return (long[,])matrix.Clone();
+ }
+
+ if (power % 2 == 0)
+ {
+ var half = MatrixPower(matrix, power / 2);
+ return MatrixMultiply(half, half);
+ }
+ else
+ {
+ return MatrixMultiply(matrix, MatrixPower(matrix, power - 1));
+ }
+ }
+
+ private long[,] MatrixMultiply(long[,] a, long[,] b)
+ {
+ return new long[,]
+ {
+ { a[0, 0] * b[0, 0] + a[0, 1] * b[1, 0], a[0, 0] * b[0, 1] + a[0, 1] * b[1, 1] },
+ { a[1, 0] * b[0, 0] + a[1, 1] * b[1, 0], a[1, 0] * b[0, 1] + a[1, 1] * b[1, 1] }
+ };
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/MemoizedFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/MemoizedFibonacci.cs
new file mode 100644
index 0000000..9b424fe
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/MemoizedFibonacci.cs
@@ -0,0 +1,36 @@
+namespace FibonacciImplementations;
+
+///
+/// Memoized recursive implementation of Fibonacci calculation
+/// Time complexity: O(n)
+/// Space complexity: O(n) for memoization cache + O(n) for call stack
+///
+public class MemoizedFibonacci : IFibonacci
+{
+ public string Name => "Memoized Recursive";
+
+ public long Calculate(int n)
+ {
+ if (n < 0) throw new ArgumentException("n must be non-negative");
+
+ var memo = new Dictionary();
+ return CalculateWithMemo(n, memo);
+ }
+
+ private long CalculateWithMemo(int n, Dictionary memo)
+ {
+ if (memo.ContainsKey(n))
+ return memo[n];
+
+ long result;
+ if (n == 0)
+ result = 0;
+ else if (n == 1)
+ result = 1;
+ else
+ result = CalculateWithMemo(n - 1, memo) + CalculateWithMemo(n - 2, memo);
+
+ memo[n] = result;
+ return result;
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/Multiple-Implementations/FibonacciImplementations/RecursiveFibonacci.cs b/Fibonacci/Multiple-Implementations/FibonacciImplementations/RecursiveFibonacci.cs
new file mode 100644
index 0000000..fa26eee
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciImplementations/RecursiveFibonacci.cs
@@ -0,0 +1,19 @@
+namespace FibonacciImplementations;
+
+///
+/// Simple recursive implementation of Fibonacci calculation
+/// Time complexity: O(2^n)
+/// Space complexity: O(n) due to call stack
+///
+public class RecursiveFibonacci : IFibonacci
+{
+ public string Name => "Recursive";
+
+ public long Calculate(int n)
+ {
+ if (n < 0) throw new ArgumentException("n must be non-negative");
+ if (n == 0) return 0;
+ if (n == 1) return 1;
+ return Calculate(n - 1) + Calculate(n - 2);
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/Multiple-Implementations/FibonacciTests/FibonacciTests.csproj b/Fibonacci/Multiple-Implementations/FibonacciTests/FibonacciTests.csproj
new file mode 100644
index 0000000..0287a5e
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciTests/FibonacciTests.csproj
@@ -0,0 +1,29 @@
+
+
+
+ net8.0
+ enable
+ enable
+
+ false
+ true
+
+
+
+
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+ all
+
+
+
+
+
+
+
+
diff --git a/Fibonacci/Multiple-Implementations/FibonacciTests/GlobalUsings.cs b/Fibonacci/Multiple-Implementations/FibonacciTests/GlobalUsings.cs
new file mode 100644
index 0000000..8c927eb
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciTests/GlobalUsings.cs
@@ -0,0 +1 @@
+global using Xunit;
\ No newline at end of file
diff --git a/Fibonacci/Multiple-Implementations/FibonacciTests/UnitTest1.cs b/Fibonacci/Multiple-Implementations/FibonacciTests/UnitTest1.cs
new file mode 100644
index 0000000..55b9af6
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/FibonacciTests/UnitTest1.cs
@@ -0,0 +1,101 @@
+namespace FibonacciTests;
+
+using FibonacciImplementations;
+
+public class FibonacciTests
+{
+ private readonly List _implementations;
+
+ public FibonacciTests()
+ {
+ _implementations = new List
+ {
+ new RecursiveFibonacci(),
+ new IterativeFibonacci(),
+ new MemoizedFibonacci(),
+ new DynamicProgrammingFibonacci(),
+ new MatrixFibonacci()
+ };
+ }
+
+ [Theory]
+ [InlineData(0, 0)]
+ [InlineData(1, 1)]
+ [InlineData(2, 1)]
+ [InlineData(3, 2)]
+ [InlineData(4, 3)]
+ [InlineData(5, 5)]
+ [InlineData(6, 8)]
+ [InlineData(7, 13)]
+ [InlineData(8, 21)]
+ [InlineData(9, 34)]
+ [InlineData(10, 55)]
+ [InlineData(15, 610)]
+ [InlineData(20, 6765)]
+ public void Calculate_ShouldReturnCorrectFibonacciNumber_ForAllImplementations(int n, long expected)
+ {
+ foreach (var implementation in _implementations)
+ {
+ var result = implementation.Calculate(n);
+ Assert.Equal(expected, result);
+ }
+ }
+
+ [Fact]
+ public void Calculate_ShouldThrowArgumentException_ForNegativeInput()
+ {
+ foreach (var implementation in _implementations)
+ {
+ Assert.Throws(() => implementation.Calculate(-1));
+ }
+ }
+
+ [Fact]
+ public void Calculate_ShouldReturnConsistentResults_AcrossAllImplementations()
+ {
+ // Test first 25 Fibonacci numbers (avoid too large numbers for recursive implementation)
+ for (int n = 0; n < 25; n++)
+ {
+ long? expectedResult = null;
+
+ foreach (var implementation in _implementations)
+ {
+ var result = implementation.Calculate(n);
+
+ if (expectedResult == null)
+ {
+ expectedResult = result;
+ }
+ else
+ {
+ Assert.Equal(expectedResult.Value, result);
+ }
+ }
+ }
+ }
+
+ [Fact]
+ public void AllImplementations_ShouldHaveUniqueName()
+ {
+ var names = _implementations.Select(impl => impl.Name).ToList();
+ Assert.Equal(names.Count, names.Distinct().Count());
+ }
+
+ [Fact]
+ public void Calculate_ShouldHandleLargerNumbers_ForEfficientImplementations()
+ {
+ // Test larger numbers for efficient implementations (excluding recursive)
+ var efficientImplementations = _implementations
+ .Where(impl => !(impl is RecursiveFibonacci))
+ .ToList();
+
+ const int largeN = 40;
+ const long expectedResult = 102334155; // F(40)
+
+ foreach (var implementation in efficientImplementations)
+ {
+ var result = implementation.Calculate(largeN);
+ Assert.Equal(expectedResult, result);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Fibonacci/Multiple-Implementations/README.md b/Fibonacci/Multiple-Implementations/README.md
new file mode 100644
index 0000000..a97aa5d
--- /dev/null
+++ b/Fibonacci/Multiple-Implementations/README.md
@@ -0,0 +1,79 @@
+# Multiple Fibonacci Implementations
+
+This solution demonstrates various approaches to calculating Fibonacci numbers, each with different time and space complexity characteristics.
+
+## Implementations
+
+### 1. Recursive (`RecursiveFibonacci`)
+- **Time Complexity**: O(2^n) - Exponential
+- **Space Complexity**: O(n) - Due to call stack
+- **Description**: Simple recursive implementation following the mathematical definition
+- **Use Case**: Educational purposes; demonstrates the naive approach
+
+### 2. Iterative (`IterativeFibonacci`)
+- **Time Complexity**: O(n) - Linear
+- **Space Complexity**: O(1) - Constant
+- **Description**: Bottom-up iterative approach using only two variables
+- **Use Case**: Most efficient for general purpose use
+
+### 3. Memoized Recursive (`MemoizedFibonacci`)
+- **Time Complexity**: O(n) - Linear (with memoization)
+- **Space Complexity**: O(n) - For memoization cache + call stack
+- **Description**: Recursive with caching to avoid redundant calculations
+- **Use Case**: When you need to calculate multiple Fibonacci numbers
+
+### 4. Dynamic Programming (`DynamicProgrammingFibonacci`)
+- **Time Complexity**: O(n) - Linear
+- **Space Complexity**: O(n) - For the array
+- **Description**: Bottom-up approach building a table of results
+- **Use Case**: When you need all Fibonacci numbers up to n
+
+### 5. Matrix Exponentiation (`MatrixFibonacci`)
+- **Time Complexity**: O(log n) - Logarithmic
+- **Space Complexity**: O(log n) - Due to recursion in matrix exponentiation
+- **Description**: Uses matrix multiplication and fast exponentiation
+- **Use Case**: Most efficient for very large n values
+
+## Running the Solution
+
+### Build the Solution
+```bash
+dotnet build
+```
+
+### Run Tests
+```bash
+dotnet test
+```
+
+### Run Performance Benchmark
+```bash
+dotnet run --project FibonacciBenchmark
+```
+
+## Performance Results
+
+The benchmark demonstrates clear performance differences:
+
+- **Iterative**: Fastest and most memory efficient
+- **Matrix Exponentiation**: Best for very large numbers (O(log n))
+- **Dynamic Programming**: Good balance, useful when you need all values up to n
+- **Memoized Recursive**: Good for multiple calculations, but higher memory overhead
+- **Recursive**: Exponential time complexity, only suitable for small inputs
+
+## Test Coverage
+
+The test suite includes:
+- Correctness verification for known Fibonacci values
+- Consistency testing across all implementations
+- Edge case handling (negative inputs)
+- Large number testing for efficient implementations
+- Unique naming verification
+
+## Key Insights
+
+1. **Recursive** approach demonstrates the importance of algorithm optimization
+2. **Iterative** shows how simple changes can dramatically improve performance
+3. **Memoization** illustrates the time-space tradeoff in optimization
+4. **Matrix multiplication** shows advanced mathematical approaches to optimization
+5. **Dynamic Programming** demonstrates systematic bottom-up problem solving
\ No newline at end of file