官术网_书友最值得收藏!

7 幸福的數

本章摘要

數學內容:數的乘法和加法,集合的概念。

編程內容:遞歸函數、集合set的使用。

注意事項:本章進一步實際操練遞歸函數,進一步舉例遞歸過程中可能出現的死循環和防止辦法,遞歸函數部分需要至少實際練習4個實例。

本章我們來玩一個簡單的數字游戲。

把任意一個數n拆分成單個數字,比如23,拆成2,3兩個數字,然后全部平方并相加,得到一個新數m,本例中,

m=2×2+3×3=13

如果這個數字m=1,那么n是憂傷的,否則,繼續進行拆分,然后求平方和。本例中就是把13繼續拆分為:1×1+3×3=10,1×1+0×0=1,最終23經過三次這樣的運算,成了1,因此23是一個憂傷的數,因為它經歷過很多事以后,孤獨終老,怎能不憂傷呢?

這個游戲如果用Python來實現,找出在1000以內有哪些數是憂傷的,哪些是幸福的,該怎么實現呢?

分析:每個數都要進行拆分,求平方和,判斷是否是幸福的數,如果不是則繼續同樣的過程,這個行為非常適合用遞歸函數來實現。在計算過程中,會碰到一些以前已經算過的數,并且已經知道它是憂傷或幸福的數,就沒有必要繼續算下去了。這個信息要存儲起來,而且計算前要不斷地比較,那就涉及判斷一個數是否在某個集合中,這個數據結構使用集合set來存儲比較合適。注意,在分析過程中,注重程序的流程和用到的數據結構。

結論1:用遞歸函數來實現。

結論2:用set來存儲已經確定是憂傷/幸福的數。

主站蜘蛛池模板: 三河市| 巴中市| 温州市| 巴中市| 江阴市| 山西省| 宿迁市| 巫山县| 庐江县| 昌江| 武汉市| 九江市| 河东区| 电白县| 中西区| 连州市| 垫江县| 贵德县| 嫩江县| 彭山县| 民和| 平塘县| 漳州市| 特克斯县| 闸北区| 封开县| 长葛市| 舞钢市| 京山县| 巴塘县| 白河县| 福贡县| 云南省| 兰州市| 永寿县| 腾冲县| 昭觉县| 洛阳市| 如东县| 霍林郭勒市| 鲁山县|