函数的递归调用(或归纳步骤)是什么,该函数返回的整数数量从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
限制的要点是什么?这是一个好奇心还是一个学术任务? –