所以我想寫一個函式來獲取一個數字,如果它是一個“完美數字”,則回傳 True。我需要在我的函式中不使用 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
問題是當我得到一個不與我想檢查的數字相除但我不知道如何解決它的整數時。任何如何讓它更快的想法也會有所幫助
uj5u.com熱心網友回復:
你可以這樣做:
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
而非遞回解決方案只是為了檢查:
def non_recursive(num: int):
return sum(i for i in range(1, num) if num%i==0) == num
uj5u.com熱心網友回復:
這是一個遞回解決方案。但是,它帶有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)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/470053.html
上一篇:遞回函式-階乘