{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def factorial_iterative(n):\n", " product = 1\n", " for i in range(2, n+1):\n", " product *= i\n", " return product" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def factorial_recursive(n):\n", " if 1 >= n:\n", " return 1\n", " else:\n", " return n * factorial_recursive(n-1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# time measurement for the two \"factorial\" implementations\n", "\n", "import time\n", "import random\n", "\n", "step = 2\n", "nmax = 64\n", "repetitions = 100000\n", "\n", "perf_iter, perf_recu = {}, {}\n", "\n", "for n in range(0, nmax+1, step):\n", " runtime_iter, runtime_recu = 0.0, 0.0\n", " result_iter, result_recu = 0, 0\n", " \n", " for i in range(repetitions):\n", " start = time.time()\n", " result_iter = factorial_iterative(n)\n", " runtime_iter += time.time() - start\n", " \n", " start = time.time()\n", " result_recu = factorial_recursive(n)\n", " runtime_recu += time.time() - start\n", "\n", " perf_iter[n] = runtime_iter/repetitions\n", " perf_recu[n] = runtime_recu/repetitions\n", "\n", " print(n, \"%10.5e\" % perf_iter[n], \"%10.5e\" % perf_recu[n], \"%10.5e\" % result_iter, \"%10.5e\"% result_recu, sep=\"\\t\", end=\"\\n\")\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# plot the measurement using seaborn\n", "\n", "import seaborn as sbn\n", "import matplotlib.pyplot as plt\n", "\n", "keylist_iter = list(perf_iter.keys())\n", "vallist_iter = list(perf_iter.values())\n", "\n", "keylist_recu = list(perf_recu.keys())\n", "vallist_recu = list(perf_recu.values())\n", "\n", "fig, ax = plt.subplots()\n", "fig.set_size_inches(15, 9)\n", "plt.xticks(fontsize=18, color=\"#322300\")\n", "plt.yticks(fontsize=18, color=\"#322300\")\n", "\n", "ax.set_xlabel(\"argument value n\", fontsize=24, color=\"#322300\")\n", "ax.set_ylabel(\"average runtime in seconds\", fontsize=24, color=\"#322300\")\n", "\n", "sbn.regplot(x=keylist_iter, y=vallist_iter, color='#147864', \\\n", " order=1, scatter_kws={'s':5}) # green for iterative\n", "sbn.regplot(x=keylist_recu, y=vallist_recu, color='#002855', \\\n", " order=1, scatter_kws={'s':5}) # blue for recursive\n", "\n", "ax.set(xlim=(min(min(keylist_iter), min(keylist_recu)), max(max(keylist_iter), max(keylist_recu))))\n", "ax.set(ylim=(min(min(vallist_iter), min(vallist_recu)), max(max(vallist_iter), max(vallist_recu))))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" } }, "nbformat": 4, "nbformat_minor": 5 }