为了账号安全,请及时绑定邮箱和手机立即绑定

针对Python的gcd有个大大的疑问!!!!求解答!!!!!小白求大神鞭挞!!!

针对Python的gcd有个大大的疑问!!!!求解答!!!!!小白求大神鞭挞!!!

asdhjhg 2017-03-14 22:28:30
class Rational(object):     def __init__(self, p, q):         self.p = p         self.q = q         def gcd(p,q):             if q==0:                 return p             return gcd(q,p%q)         self.r=gcd(p,q) #这里为什么要赋值给self.r??为什么赋值给g,或者a之类的不行?这怎么解释???     def __add__(self, r):         return Rational(self.p * r.q + self.q * r.p, self.q * r.q)     def __sub__(self, r):         return Rational(self.p*r.q-r.p*self.q,self.q*r.q)     def __mul__(self, r):         return Rational(self.p*r.p,self.q*r.q)     def __div__(self, r):         return Rational(self.p*r.q,self.q*r.p)     def __str__(self):         return '%s/%s'%(self.p/self.r,self.q/self.r)     __repr__ = __str__ r1 = Rational(1, 2) r2 = Rational(1, 4) print r1 + r2 print r1 - r2 print r1 * r2 print r1 / r2这道题,print出来很正常但是我突然想到一个问题,假如带入的是r1 = Rational(120,1)r2 = Rational(45,1),按照gcd()可得-->gcd(120,45)-->gcd(45,120%45)-->gcd(45,30)。到这里,问题来了,最大公约数30,那么带入结果120/45,分子分母同时除以30!!好家伙!!等于4/1.5,除非是可以继续循环的,一直到15为止!再来r1 = Rational(6,1)r2 = Rational(16,1),按照gcd()可得-->gcd(6,16)-->gcd(16,6%16)-->gcd(16,0),即最大公约数等于6,这tm不是打脸吗!!!???小白求大神鞭挞!!!
查看完整描述

2 回答

?
python业余爱好者

TA贡献2条经验 获得超0个赞

我也不会。。。

查看完整回答
反对 回复 2017-04-17
  • 2 回答
  • 0 关注
  • 2330 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信