如何使用递归代码查找数字是否为完美数字
How to find if a number is perfect number with a recursive code
所以我想写一个函数来获取一个数字,return 如果它是一个“完美数字”则为真。
我需要在我的函数中不使用 for 或 while 来完成它。
这是我尝试做的 -
def question_1(num):
i = 1
def checkDivide(n, num):
if num % n == 0:
return n
else:
return 0
def SumThemAll(num, i):
if i == num:
return 0
else:
return i + SumThemAll(num, checkDivide(i + 1, num))
if num == SumThemAll(num, i):
return True
else:
return False
问题是当我得到一个不除以我要检查的数字的整数时
但我不知道如何修复它。
任何让它变得更快的想法也会有所帮助
你可以这样做:
def perfect(num: int):
def recursive(num: int, i=1):
if num == i:
return 0
elif num % i == 0:
return i+recursive(num, i+1)
else:
return recursive(num, i+1)
return False if num < 2 else recursive(num)==num
non-recursive 解决方案只是为了检查:
def non_recursive(num: int):
return sum(i for i in range(1, num) if num%i==0) == num
这是一个递归的解决方案。但是,它带有 WARNING.
在引发 RecursionError 之前,它可以处理的最大值是 1994。
def isperfect(n):
def isperfect_(n, m, s=0):
if m == 0:
return n == s
if n % m == 0:
s += m
return isperfect_(n, m - 1, s)
return False if n < 2 else isperfect_(n, n//2)
所以我想写一个函数来获取一个数字,return 如果它是一个“完美数字”则为真。 我需要在我的函数中不使用 for 或 while 来完成它。 这是我尝试做的 -
def question_1(num):
i = 1
def checkDivide(n, num):
if num % n == 0:
return n
else:
return 0
def SumThemAll(num, i):
if i == num:
return 0
else:
return i + SumThemAll(num, checkDivide(i + 1, num))
if num == SumThemAll(num, i):
return True
else:
return False
问题是当我得到一个不除以我要检查的数字的整数时 但我不知道如何修复它。 任何让它变得更快的想法也会有所帮助
你可以这样做:
def perfect(num: int):
def recursive(num: int, i=1):
if num == i:
return 0
elif num % i == 0:
return i+recursive(num, i+1)
else:
return recursive(num, i+1)
return False if num < 2 else recursive(num)==num
non-recursive 解决方案只是为了检查:
def non_recursive(num: int):
return sum(i for i in range(1, num) if num%i==0) == num
这是一个递归的解决方案。但是,它带有 WARNING.
在引发 RecursionError 之前,它可以处理的最大值是 1994。
def isperfect(n):
def isperfect_(n, m, s=0):
if m == 0:
return n == s
if n % m == 0:
s += m
return isperfect_(n, m - 1, s)
return False if n < 2 else isperfect_(n, n//2)