一边学Python,一边学算法
不带着问题去学习永远是没有什么成就的。
于是为了更好的学习Python,我还是决定开始看算法的研究书,然后用Python来实现这些算法。在学习算法的同时巩固Python的知识。
今天看的是《计算机程序设计艺术》第一卷,用Python验算了欧几里得的求最大公约数的算法
算法的描述是:
有数m和n,求它的公约数的方法是:
1.找到m和n之间的最大数,求它们的余数
2.如果余数为0,则其中较小的那个数即为所求
3.如果余数不为0,则将较大的数置为较小的那个数值,将较小的那个数值置为1中产生的余数,继续进行步骤1
于是产生的程序如下(Python3):
__author__ = 'Siglud' # -*- coding: utf-8 -*- def find_greatest_common_divisor(x, y): '''查找最大公约数函数 根据计算机程序设计艺术中第一节的算法来求最大公约数''' temp = x > y and x%y or y%x if temp == 0: return x > y and y or x else: if (x > y): return find_greatest_common_divisor(y,temp)#此处一定要有Return,否则还会执行一轮 else: return find_greatest_common_divisor(x,temp) x = input("请输入x的值:") y = input("请输入y的值:") print(find_greatest_common_divisor(int(x),int(y)))
值得注意的是以下几点:
- 如果要在Python的程序中使用中文,记得加注释:# -*- coding: utf-8 -*- ,这样才能顺利的进行调试。
- 在递归的调用中记得一定要用return调用下一轮的函数,否则最后还会执行一轮,这样产生的数据就是错误的了。
- x and y or c 是Python的三元运算符。
- Python的强制类型转换方式和Java不同。
- 这个算法很粗略,没有考虑到用户输入不符合规范的可能性。
评论
发表评论