知道一个数是否可以被3整除的递归函数

2024-10-08 20:21:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要创建一个递归函数,如果输入的数字可以被3整除,则返回true。我知道没有递归会更简单,但是我需要创建一个这种类型的函数。在

我已经创建了一个函数,但是我想知道是否有可能创建一个更好的函数,因为有一个大的“num”,这个函数不能工作。我想我应该用这个事实:如果一个自然数的位数之和可以被3整除,那么它就可以被3整除。在

这是我的代码:

def divThree(num):
    if num==3:
        return true
    else:
        divThree(num-3)

编辑:我创建了一个更好的函数,但是我不明白如果这个数可以被3整除,为什么不返回true。相反,如果不是,则会出现最大递归错误。在

^{pr2}$

Tags: 函数代码true编辑类型returnifdef
3条回答

递归放大要减去的因子:

def divisible_by_tree(num, factor=3):
    if factor < num:
        num = divi(num, factor * 2)
    if num >= factor:
        num -= factor
    if factor > 3:
       return num
    return num == 0
  • 最直接的解决方案是使用模3来检查 可除性,但这不是递归的。在
  • 另一种解决方案是递归地继续除以3,直到降到1为止,但对于大值,这将导致堆栈溢出。在
  • 第三种适合递归的解决方案是利用这样一个特性:如果一个数的位数和可以被3整除,那么这个数就可以被3整除。在

下面是第三个选项的实现,它可以避免模运算,并处理非常大的数字:

def divThree(num):
    if num < 10:
        return (num in [3, 6, 9])
    else:
        return divThree(sum([int(digit) for digit in str(num)]))

如果您想将0也可以被3整除,那么可以将0添加到第一个return中的列表中。在

如果要同时包含正值和负值,请在前面加上:

^{pr2}$

作为要执行的第一个检查。在

当使用3作为除数时,需要检查数字是否有零余数。在

使用%运算符检查余数。因此,如果你想知道某个东西是否可以被3整除,那么使用num % 3 == 0如果余数为零,那么这个数可以被3整除。在

这将返回true:

print (6 % 3 == 0)
returns True

这将返回False:

^{pr2}$

这里有一个简单的函数来检查真与假:

def divThree(numb):
    return numb % 3 == 0

print (divThree(99))

编辑:

我不确定你要检查的数字有多大,但我用我认为是一个很大的数字测试了这个函数,它起作用了。我可能只是不明白你需要思考什么。在

def divThree(numb):
    return numb % 3 == 0

print (divThree(4325609549876542987503216540321540104986213754901245217346214390735402153407213540213457183254098263487053214132754073254921534987053245321454))

Returned True

相关问题 更多 >

    热门问题