{ "cells": [ { "cell_type": "code", "execution_count": null, "id": "5baec308-f765-4d81-81c0-ada21cfdcc31", "metadata": {}, "outputs": [], "source": [ "\n", "\"\"\"\n", " myfib(n)\n", "\n", "Calculate Fibonacci number F_n using the recurrence relation\n", "F_1 = 1, F_2 = 1, and F_n = F_n-1 + F_n-2 for n > 2.\n", "\"\"\"\n", "function myfib(n)\n", "\n", " fp = 1\n", " if n == 1\n", " return fp\n", " end\n", "\n", " fc = 1\n", " if n == 2\n", " return fc\n", " end\n", "\n", " for i = 3:n\n", " fn = fc + fp\n", " fp = fc\n", " fc = fn\n", " end\n", "\n", " return fc\n", "end" ] }, { "cell_type": "code", "execution_count": null, "id": "49884960-941b-41ed-b01d-78cc3a65ce1f", "metadata": {}, "outputs": [], "source": [ "\n", "?myfib" ] }, { "cell_type": "code", "execution_count": null, "id": "eb821ac9-b2d9-49da-8c09-c38643e11678", "metadata": {}, "outputs": [], "source": [ "\n", "myfib.(1:10)" ] }, { "cell_type": "markdown", "id": "0ddee6fd-38a0-407f-bfbe-579d1711fdfb", "metadata": {}, "source": [ "\n", "A **recursive version** of the same function:" ] }, { "cell_type": "code", "execution_count": null, "id": "0304fe59-42b4-49e6-8c7d-f64de53b7f43", "metadata": {}, "outputs": [], "source": [ "\n", "function myfib1(n)\n", " \n", " if n == 1\n", " return 1\n", " elseif n == 2\n", " return 1\n", " end\n", "\n", " return myfib1(n-1) + myfib1(n-2)\n", "end" ] }, { "cell_type": "code", "execution_count": null, "id": "6c61e693-89b3-4989-bb7e-cdede1cce12e", "metadata": {}, "outputs": [], "source": [ "\n", "myfib1.(1:11)" ] }, { "cell_type": "markdown", "id": "f70b4a49-7b3d-4f34-a273-6db4b9e7f796", "metadata": {}, "source": [ "Elegant but very slow" ] }, { "cell_type": "code", "execution_count": null, "id": "6ee1dc3f-2f89-47e1-b48d-31262a105a87", "metadata": {}, "outputs": [], "source": [ "\n", "@time myfib(51); # faster than 10^{-6} sec." ] }, { "cell_type": "code", "execution_count": null, "id": "bdd20dea-2bbc-4f8d-8368-403368e6a481", "metadata": {}, "outputs": [], "source": [ "@time myfib1(51); # 79 sec." ] }, { "cell_type": "markdown", "id": "7b47301f-d942-4d0f-b13d-a20de295cc7c", "metadata": {}, "source": [ "A version of the function that uses a different style of code in the main loop: " ] }, { "cell_type": "code", "execution_count": null, "id": "b7c7a506-6273-496e-9601-147aa6d8aa9b", "metadata": {}, "outputs": [], "source": [ "\n", "\"\"\"\n", " myfib2(n)\n", "\n", "Calculate Fibonacci number F_n using the recurrence relation\n", "F_1 = 1, F_2 = 1, and F_n = F_n-1 + F_n-2 for n > 2.\n", "\"\"\"\n", "function myfib2(n)\n", "\n", " fp = 1\n", " if n == 1\n", " return fp\n", " end\n", "\n", " fc = 1\n", " if n == 2\n", " return fc\n", " end\n", "\n", " for i = 3:n\n", " fc, fp = fc + fp, fc\n", " end\n", "\n", " return fc\n", "end" ] }, { "cell_type": "code", "execution_count": null, "id": "8a498381-528f-40d2-9e46-38e920894dce", "metadata": {}, "outputs": [], "source": [ "myfib2.(1:11)" ] }, { "cell_type": "code", "execution_count": null, "id": "707a277b-d813-4378-9667-678b398a5c12", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.11.6", "language": "julia", "name": "julia-1.11" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.11.6" } }, "nbformat": 4, "nbformat_minor": 5 }