注册 登录
每天一道算法题

第一章:计算最值,次最值

第二章:进制的转换

第三章:质数,水仙花,公约数

第四章:子序列问题

首页 > 每天一道算法题 > 第三章:质数,水仙花,公约数 > 3.2节:判断水仙花数-递归实现

3.2节:判断水仙花数-递归实现

薯条老师 2021-04-06 16:07:28 205580 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师的线下Python小班办得很好,学员的平均就业薪资有11K。线下小班培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

3.2.1 算法思路

首先得理解什么是水仙花数。仙花数是指一个正的3位数,它的每个位上的数字的3次幂之和等于它本身。153就是一个典型的水仙花数:

图片.png

所以判断一个数是否为水仙花数,只需将每位的数字取出来,然后将它们的3次幂相加求和。取出每一位的数字,可使用求余+整除法,例如将153与10进行模运算,余数为3,然后再将153与10整除,可得到15。不断重复这样的过程,直到被除数小于1。以下是取出每位数的代码实现:

number = 153
# 获取个位数
the_unit = number // 1 % 10
# 获取十位数
the_ten =  number // 10 % 10
# 获取百位数
the_hundred = number // 100 % 10

算法逻辑比较简单,只需在循环中不断更新每位的权值即可:十进制个位的权值位10的0次方,十进制百位的权值为10的1次方,以此类推。在本节的算法实现中,稍微加大难度,使用递归来实现。

3.2.2 算法实现

# __author__ = 薯条老师
def is_narcissistic_number(number):
    # 递归计算每位的三次幂之和 
    def __sum(number):
        # 将当前number与10取模,可得到最低位的数字,然后将与10整除后的值传递给递归调用
        # 如果当前的number小于1,说明已经将最高位的数整除,直接返回0。
        return 0 if number < 1 else (number % 10) ** 3 + __sum(number // 10)
                
    return True if number == __sum(number) else False
    
    
if __name__ == "__main__":
    number = 370
    print("{} 是水仙花数".format(number)) if \
        is_narcissistic_number(number) else print("{}不是水仙花数".format(number))

在理解递归调用时,需要找到递归的退出边界,上文代码中的number小于1就是一个退出边界,一旦参数小于1即终止递归的执行。同学们在必要时可以将递归调用的每一步画出来,这样更容易理解。

3.2.3 最具实力的小班培训

来这里参加Python和Java小班培训的学员大部分都找到了很好的工作,平均月薪有11K,学得好的同学,拿到的会更高。由于是小班教学,所以薯条老师有精力把每位学员都教好。打算参加线下小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取学习资料:


欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录