{ "cells": [ { "cell_type": "markdown", "id": "0c13666c-6faa-49e7-93df-df5fc0411aed", "metadata": {}, "source": [ "###
San Jose State University
Department of Applied Data Science

**DATA 200
Computational Programming for Data Analytics**

Spring 2024
Instructor: Ron Mak

**Assignment #13
Autogeneration and Recursion**

Assigned: May 2, 2024
Due: May 9 at 5:30 PM

100 points maximum
Individual work only!
" ] }, { "cell_type": "markdown", "id": "3cc6f07d-fb63-467a-9461-8b164263161f", "metadata": {}, "source": [ "# Autogenerated class" ] }, { "attachments": {}, "cell_type": "markdown", "id": "b48d39d5-6656-47fc-8317-61e74e46ba3d", "metadata": {}, "source": [ "#### **PROBLEM 1** [40 points] Convert class `RomanNumeral` (from Assignment 9) to an autogenerated `dataclass`. The class only needs to be able to convert an integer value to the equivalent Roman numeral string. You can assume the the integer value can be 1 through 3999. You do not need to implement the arithmetic operators, but you should implement `__repr__()` and `__str()__`.\n", "#### Test your data class with the integer values 1776, 1947, 1949, 1999, 2001, and 2024." ] }, { "cell_type": "markdown", "id": "60fe46b7-2403-4eec-8310-df8eaa615aa1", "metadata": {}, "source": [ "# Squares of integers" ] }, { "attachments": { "70f11e82-0340-4e4c-aef8-f1ae1883235c.png": { "image/png": "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cPjhh7ss5SQFKEABClCAAhSggL8CDD6VYFVVFX7+85/j448/xvDhw5GUlIQ1a9Zg+vTpeOeddxCnHlfIRAEKUIACFKAABSjgvwAvuytDafF8//33MW/ePK3lc/Xq1bj44ouxYsUKvP322/4rcw8UoAAFKEABClCAAppAzASflZWVsNvtbqs9NzcXa9euxUMPPeRcPmnSJG1aLsEzUYACFKAABShAAQoERiBqg8+ioiL8+c9/xuTJk9XjzFKQoR73169fP+3y+ltvvdVJTy6rH3XUUbDZbM757733HsxmM04++WTnvHCZaGpqwoQJE2A0GvHJJ5+ES7FYDgpQgAIUoAAFKNCnQNQGnxKc/fa3v0V5eTnmz5+vXVY/44wz8PLLL+Occ87B66+/3iPO4sWL8dFHH2nB66hRo3pcL1QLFixYgA0bNqC9vR2tra2hKgbzpQAFKEABClCAAl4LRO0NR21tbTCZTHj11Ve1Vk2ROe2007B582bt9cILL+D888/vBrZ06VItaL3nnntw/fXXd1se6hnfffcdFi5cGOpiMH8KUIACFKAABSjgk0DUBp+PP/44UlNTnYGn6Mhl9ClTpmjB5+7du7uBvfnmm7jiiitw++234/777++2PNQzmpubtfINHDgQ6enpWLduXaiLxPwpQAEKUIACFKCAVwJRe9ldhk4666yzumHU1dVp8wYMGNBpmdxwNGfOHK21Uy5rS9q4cSP+/e9/d1ovlB+kxVNaPp988kmtv2coy8K8KUABClCAAhSggC8CUdvy6Q5DxvN89913tUUylJIjSYviJZdcogV0OTk5ePjhhyHz5NL8rFmzMHXqVMeqPb6vXLnS60DVarXilltu6XGfrgukj+cf/vAHXHTRRTjzzDPx+9//3nUxpylAAQpQgAIUoEBECMRU8CmBXk1NDU466SRcfvnlzgqSgeTlyUaS5JK7a5K75D1JH374odd9MePj4z0KPltaWrTL7YmJiXjssce04vBGI09qhetQgAIUoAAFKBBuAjETfC5ZsgTPPfec9thMuQnJYDA46+Lcc8/V7hx3zvBhQm5OcncDU2+7kj6onqQ//vGP2jikTz/9NKRllokCFKAABShAAQpEqoBn0U+kHt3Bcssl8V/96lda4CZDKGVnZwf8iPr37w95BTpt2rQJDzzwgHbp/6qrrnK7e3kS09VXX40f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" } }, "cell_type": "markdown", "id": "c8f00c68-d508-493d-8469-d2d2984aef34", "metadata": {}, "source": [ "#### Observe this rather curious way to compute the squares of the consecutive integers using odd numbers:\n", "```\n", " n square = prev square + odd\n", "-- ------ ----------- ---\n", " 1 1 \n", " 2 4 = 1 + 3\n", " 3 9 = 4 + 5\n", " 4 16 = 9 + 7\n", " 5 25 = 16 + 9\n", " 6 36 = 25 + 11\n", " 7 49 = 36 + 13\n", " 8 64 = 49 + 15\n", " 9 81 = 64 + 17\n", "10 100 = 81 + 19\n", "```\n", "![Screenshot 2024-05-02 at 3.43.13 PM.png](attachment:70f11e82-0340-4e4c-aef8-f1ae1883235c.png)\n", "#### Devise a recursive algorithm to compute squares based on this observation." ] }, { "cell_type": "markdown", "id": "f8733196-9416-4093-b3a8-8af10ce3d91c", "metadata": {}, "source": [ "#### **PROBLEM 2** [10 points] What is the base case of the recursion?" ] }, { "cell_type": "markdown", "id": "277444f0-892b-4b74-825d-e96d3b2fb84f", "metadata": {}, "source": [ "#### **PROBLEM 3** [10 points] When computing the square of `n`, what is the simpler problem whose solution leads to the overall solution?" ] }, { "cell_type": "markdown", "id": "78a0b390-9231-424a-a713-63186e9c8e43", "metadata": {}, "source": [ "#### **PROBLEM 3** [40 points] Implement your recursive algorithm as a **recursive function** `square(n)` that computes and returns the value of the square of `n`. You may assume that `n` is a positive integer." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.5" } }, "nbformat": 4, "nbformat_minor": 5 }