趣味数学和Python编程
上QQ阅读APP看书,第一时间看更新

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来存储已经确定是忧伤/幸福的数。