写这篇文章的起因是作业本上的题目
要求输入一个大于一的整数,输出形如100= 2*2*5*5
的程序
原题
1 | def f(x): |
原题大概长这样 ,做了一些修改
第一空
首先,这个空在flag==0的缩进体里,说明是和第一个数有关,结合上面给的注释这个题目自带的注释在作业本里真是少见呢,很容易看出这句空是为了让后面的运行跳过这段缩进,得flag=1
第二空
稍微难了那么一点点
就是说只要x % k == 0
就一定要执行的代码
既然此时k已经为一个质因数了
那么要继续往下算就得让x变小所以得是x//=k
为什么非得是//
?因为python里int/int得到的是float,而//得到的是int
第三空
如果x % k != 0
,显而易见得,应该是k自增,所以k+=1
完整代码
1 | def f(x): |
递归写法
参考了CSDN文章
思路:以x % i == 0
为递归条件,不满足i自增,满足则分解x再调用f(x)
完整代码
1 | def f(x): |
在参考文章的代码里有些错误,第二行的for循环range函数必须以x+1结尾,不然输入一个指数将没有输出
最后一行涉及了列表的分解和print()
函数的sep
参数
整个过程和递归差不多