- 趣味數學和Python編程
- 趙乘驥編著
- 559字
- 2022-07-29 14:35:01
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來存儲已經確定是憂傷/幸福的數。