分解质因数,用递归和生成器两种方法:

一、递归:

# li=[] 只被赋值一次,每次递归调用都是在为其添加新的元素,所以li相当于是一个全局变量
def fun(n, li=[]):
    if n == 1:
        return  # n = 1 的时候不进行任何操作

    for i in range(2, n+1):  # i 是偿试测试是否为质因数,取值范围是2到n
        if n % i == 0:  # 如果能整除,i是质因数
            if n/i == 1.0:  # 测试到自己了,已经是最大值。
                print(str(n)+'已经无法再分解!')
                li.append(i)
                return li
            else:
                print('{0}已被{1}分解:{0}/{1} ={2}'.format(n, i, int(n/i)))
                n = int(n/i)
                li.append(i)

                return fun(n)



print(fun(100))

 

 

二、生成器:generator

def fun1(n):
    if n == 1:
        return
    i = 1
    while i < n:
        i += 1
        if n % i == 0:
            yield i
            n = int(n/i)
            i = 1


for i in fun1(80):
    print(i,  end=' ')

 

posted @ 2020-10-17 14:05  老谭爱blog  阅读(262)  评论(0)    收藏  举报