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

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不是打脸吗!!!???小白求大神鞭挞!!!

asdhjhg
浏览 2375回答 2
2回答

python业余爱好者

我也不会。。。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python