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

这样递归为什么不对啊,求大神指点

class Rational(object):
    def __init__(self, p, q):
        self.p = p
        self.q = q

    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 - self.q * r.p, 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):
        if self.p>self.q:
            miner=self.q
            maxer=self.p
        else:
            miner=self.p
            maxer=self.q
        a,b=judegement(miner,maxer)
        if self.p>self.q:
            return '%s/%s' %(b,a)
        else:
            return '%s/%s' %(a,b)
    def judgement(miner,maxer):
        for i in range(miner+1):
            if maxer%i==0:
                maxer=maxer/i
                miner=miner/i
                return judegment(miner,maxer) 
        return miner,maxer
    __repr__ = __str__

r1 = Rational(1, 2)
r2 = Rational(1, 4)
print r1 + r2
print r1 - r2
print r1 * r2
print r1 / r2


正在回答

1 回答

首先你judgement函数写的有问题,里边的range(miner+1)应改成range(2,miner+1),因为如果每次从1开始做for循环的话,递归之后会进入死循环。其次你的judgement第二次拼错了。代码如下:

def judgement(miner,maxer):
        for i in range(2,miner+1):
            if maxer%i==0:
                maxer=maxer/i
                miner=miner/i
                return judgement(miner,maxer) 
        return miner,maxer
print judgement(6,9)


0 回复 有任何疑惑可以回复我~
#1

龙信 提问者

非常感谢!
2017-03-06 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
python进阶
  • 参与学习       255533    人
  • 解答问题       3038    个

学习函数式、模块和面向对象编程,掌握Python高级程序设计

进入课程

这样递归为什么不对啊,求大神指点

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号