【发布时间】:2019-12-11 08:49:28
【问题描述】:
我需要创建一个递归函数,如果输入的数字可以被 3 整除,则返回 true。我知道没有递归会更简单,但我需要创建一个这种类型的函数。
我已经创建了一个函数,但我想知道是否可以创建一个更好的函数,因为'num' 很大,该函数不起作用。我认为我应该使用这个事实:如果自然数的数字之和可以被 3 整除,那么自然数可以被 3 整除。
这是我的代码:
def divThree(num):
if num==3:
return true
else:
divThree(num-3)
编辑:我创建了一个更好的函数,但我不明白如果数字可以被三整除,为什么不返回 true。相反,如果不是,则继续最大递归错误。
def recursiveThree(num):
if num==3 or num==6 or num==9:
return true
else:
sum=0
sNum=str(num)
for i in range(0,len(sNum)):
sum=sum+int(sNum[i])
recursiveThree(sum)
【问题讨论】:
-
return num % 3 != 0 -
您没有指定错误或输入的数字有多大,但假设数字是 15 次方或以上的正整数,我认为您可能会得到最大递归深度限制到达错误。这就是我们想要解决的问题,因此我们相应地优化了我们的代码。
-
为什么你的函数需要递归?这是一个排除明显和合理的解决方案的要求,只留下特殊的、破碎的、低效的和不自然的解决方案(特别是因为 Python 不进行尾递归,并且对递归级别设置了相当低的限制)。如果这是一项任务,那就太糟糕了。
-
这是一个大学练习,所以我必须使用递归,如果它更好,使用 for cicle 更简单
-
@user8024584:好的,但这仍然是一个奇怪的要求,没有更多细节。例如:
def divisible_by_three(n): return n % 3 == 0 if random.random() < 0.1 else divisible_by_three(n)满足使用递归的要求,但几乎可以肯定不是您的讲师想要的。
标签: python python-2.7 math recursion division