鱼C论坛

 找回密码
 立即注册
查看: 6166|回复: 4

[已解决]各位鱼油好,请教一个python递归的问题

[复制链接]
发表于 2016-9-8 15:19:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 #20_同学 于 2016-9-8 15:24 编辑

python练习题里有一道是让写个代码把一个整数分解质因数,比如90=2*3*3*5这样子。
我想用递归的方式求解,代码如下:
  1. num=int(input('请输入一个正整数:'))
  2. def devFactor(x):
  3.     from math import sqrt
  4.     factor=2
  5.     m=sqrt(x+1)
  6.     while factor<=m:#分解的因数的取值范围
  7.         if x%factor==0:
  8.             print(factor,end=' ')
  9.             x=x//factor
  10.             devFactor(x)
  11.             break
  12.         factor+=1
  13.     print (x)
  14.    
  15. devFactor(num)
  16.             
复制代码

但是我发现一个问题,就是每调用一次函数自身就会都打出来一个因数。。。
求大神指教

补充一下,如果不加最后那个print,最后就会少打印一个因子出来。。。
最佳答案
2016-9-8 16:55:13
只要调用一次 devFactor 函数 ,必然就会有一次 print
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-8 16:53:54 | 显示全部楼层
print 本身就是递归的一部分啊,这也是递归的思想
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-8 16:55:13 | 显示全部楼层    本楼为最佳答案   
只要调用一次 devFactor 函数 ,必然就会有一次 print
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-8 17:12:49 | 显示全部楼层
百日维新 发表于 2016-9-8 16:55
只要调用一次 devFactor 函数 ,必然就会有一次 print

嗯。。我试一下if里面的print拿掉,那样可能就 不会多打印了,谢谢大神指点
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-8 19:17:54 | 显示全部楼层
  1. num=int(input('请输入一个正整数:'))
  2. factor=2
  3. import math
  4. m=math.sqrt(num+1)
  5. while factor<=m:
  6.     if num%factor==0:
  7.         print(factor,end=' ')
  8.         num=num//factor
  9.     elif num%factor!=0:
  10.         factor+=1
  11. if num >1:
  12.     print(num)
复制代码

递归有毒啊,这样就行了啊,但是还是想知道有没有能用递归处理的办法
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-16 14:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表