six*_*ain 0 python math recursion division python-2.7
我需要创建一个递归函数,如果输入数字可以被3整除,则返回true.我知道没有递归会更简单,但是我需要创建一个这种类型的函数.
我已经创建了一个函数,但是我想知道是否可以创建一个更好的函数,因为这个函数不起作用.我认为我应该使用这个事实:如果数字的总和可以被3整除,则自然数可以被3整除.
这是我的代码:
def divThree(num):
if num==3:
return true
else:
divThree(num-3)
Run Code Online (Sandbox Code Playgroud)
编辑:我创建了一个更好的功能,但我不明白为什么如果数字可以被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)
Run Code Online (Sandbox Code Playgroud)
这是第三个选项的实现,它避免了模运算并处理了非常大的数字:
def divThree(num):
if num < 10:
return (num in [3, 6, 9])
else:
return divThree(sum([int(digit) for digit in str(num)]))
Run Code Online (Sandbox Code Playgroud)
return
如果您想将其整除为3,则可以在第一个列表中添加0 .
如果要同时容纳正值和负值,请在前置:
if num < 0:
return divThree(-num)
Run Code Online (Sandbox Code Playgroud)
作为第一次检查.