函數的遞歸調用(或歸納步驟)是什麼,該函數返回的整數數量從1到N,它們均勻分割N.這個想法是將一個純遞歸代碼python這個函數。沒有'for'或'while'循環,兩個模塊都不能使用。功能num_of_divisors(42)返回圖8,表示1,2,3,6,7,14,21,和42的42Python純遞歸 - 除數 - 一個輸入
回答
def num_of_divisors(n):
return sum(1 if n % i==0 else 0 for i in range(((n+1)**0.5)//1)
好運它解釋給教師除數!
如果你真的不能使用for
環(?????????),那麼這是不可能的,沒有模擬。
def stupid_num_of_divisors_assigned_by_shortsighted_teacher(n, loop_num=1):
"""I had to copy this from Stack Overflow because it's such an
inane restriction it's actually harmful to learning the language
"""
if loop_num <= (n+1) ** 0.5:
if n % loop_num == 0:
return 2 + \
stupid_num_of_divisors_assigned_by_shortsighted_teacher(n, loop_num+1)
else:
return stupid_num_of_divisors_assigned_by_shortsighted_teacher(n, loop_num+1)
else:
if n % loop_num == 0:
return 1
加分點:解釋爲什麼你要添加的第一個條件2
,但僅在第二條件1
!
優秀的答案;-) – sascha
除了它使用循環...所以它違反了術語:)但是是 –
@JoranBeasley我其實錯過了。這是荒謬的。無論如何,更新,以便它符合任務的精神。 –
def n_divisors(n,t=1):
return (not n%t)+(n_divisors(n,t+1) if t < n else 0)
上試運氣好後...好打這些書真的,去上課,做筆記...
只需輸入我猜
t=0
def n_divisors(n):
global t
t += 1
return (not n%t)+(n_divisors(n) if t < n else 0)
哦,你可以做得比這更好!檢查(n + 1)/ 2中的所有t是否足夠 –
哦,我知道......但是我原本是這麼做的......但是後來我覺得如果他把它放在自己身上,我會留下至少一些改進的東西(加上我沒有必要做一個特殊的情況下添加自己的數字:P) –
是的,即使你知道這是別人的任務,你也很難忍住自己。當我寫我的解決方案時,對我來說很難:-) – cg909
這裏你去哥們,你的老師會很開心。
def _num_of_divisors(n, k):
if (k == 0):
return 0
return _num_of_divisors(n, k-1) + (n % k == 0)
def num_of_divisors(n):
return _num_of_divisors(n, n)
哈哈,偉大的思想思維相反:P + 1 –
兩個輸入。 (n,k)。唯一的輸入是N - 或(n)。這條指令簡單地實現了等分和,準確地說明了公式如何:num_of_divisor(12)= 1^0 + 2^0 + 3^0 + 4^0 + 6^0 + 12^0,這轉換爲:= 1 + 1 + 1 + 1 + 1 + 1 = 6.謝謝! – HandyFrank
它比您想象的那樣容易將一個簡單的問題從循環轉換爲遞歸函數。
開始用循環實現:
n = 42
result = []
for i in range(n+1):
if n % i == 0:
result.append(i)
然後寫一個函數
def num_of_divisors_helper(i, n, result):
if <condition when a number should be added to result>:
result.append(n)
# Termination condition
if <when should it stop>:
return
# Recursion
num_of_divisors_helper(i+1, n, result)
然後定義一個包裝函數num_of_divisors
調用num_of_divisors_helper
。您應該能夠填充遞歸函數中的空白並自己編寫包裝器函數。
這是一個簡單,低效的解決方案,但它符合您的條款。
並非一切都是關於效率。 「自然是一位修理工而不是發明家」遞歸的純粹形式不僅是計算機科學的基礎,它也是每一個進化步驟的一部分。數學只是我們可以與自然交流的語言,我提議將這個假設實現爲一段代碼:函數(N)= 1^0 + 2^0 + 3^0 + 4^0 + 6^0 + 12^0 =>我如何添加expoents?他們不必將它們作爲一個整數排除在遞歸步驟之外,它們必須能夠添加平方根,所以= 1 + 1 + 1 + 1 + 1 + 1 = 6 – HandyFrank
@HandyFrank我主要寫道,提示優化是低效的像在(n + 1)/ 2停止是可能的,不用說太多。 – cg909
不使用%
def is_divisible(n, i, k):
if k > n:
return False
if n - i*k == 0:
return True
else:
return is_divisible(n, i, k+1)
def num_of_divisors(n, i=1):
if i > n/2:
return 1
if is_divisible(n, i, 1):
return 1 + num_of_divisors(n, i+1)
else:
return num_of_divisors(n, i+1)
num_of_divisors(42) - > 8
我也試過這個!我被拒絕拒絕!不,我= 1。只有一個輸入(N) - 或(n)。定義兩個函數表示模塊:拒絕 - 我也嘗試過這一個!毫無疑問!偉大的代碼,我可以做到這一點,就像它!然而,這是我對計算機科學理論研究的一部分,與分析數論有關。不尋求有效的代碼。這條指令簡單地實現了等分和,準確地說明了公式如何:num_of_divisor(12)= 1^0 + 2^0 + 3^0 + 4^0 + 6^0 + 12^0,這轉換爲:= 1 + 1 + 1 + 1 + 1 + 1 = 6。 – HandyFrank
- 1. Python遞歸函數輸入
- 2. python中的函數輸入和遞歸
- 3. 需要兩個輸入的python遞歸函數
- 4. 的Python - 遞歸的方式返回一個整數的除數
- 5. Coverting遞歸函數的尾遞歸一個在Python
- 6. 序言 - 做一個遞歸除數
- 7. Python - 創建一個遞歸函數
- 8. 試圖寫一個Python遞歸函數
- 9. 如何清除python遞歸?
- 10. 遞歸函數Python
- 11. Python遞歸函數不遞歸
- 12. 爲用戶輸入遞歸調用一個函數
- 13. 通過遞歸創建一個字符數組(用戶輸入)
- 14. 遞歸函數,從一個給定的輸入
- 15. Python龜:遞歸函數
- 16. ajax失敗遞歸純javascript
- 17. 遞歸函數python
- 18. Python遞歸導入問題
- 19. 與Python遞歸
- 20. 遞歸函數與用戶輸入
- 21. Python的遞歸
- 22. 遞歸函數幫助(Python)
- 23. 一個遞歸函數C++
- 24. 瞭解遞歸函數python
- 25. python遞歸函數深度
- 26. 使用遞歸Python打印輸出
- 27. Python在一個遞歸函數中保留多個計數器
- 28. Python遞歸數據讀取
- 29. 如何刪除一個目錄遞歸
- 30. Mongoid:一對一嵌入,純json輸入
你嘗試過什麼了嗎? –
沒有模塊?真? – Dleep
限制的要點是什麼?這是一個好奇心還是一個學術任務? –