我正在尝试使用递归来解决问题,如果我使用'if'语句,这将非常冗长。我想看看CONST = 50的次数是多少次。我想返回50在n中出现的次数。我知道这是直截了当的,但我想用递归来实现这一点,这对我来说并不是直截了当的。条件如下:
0 < n == 50 -> 1 instance
50 < n <= 100 -> 2 instance
100 < n <= 150 -> 3 instance
150 < n <= 200 -> 4 instance
200 < n <= 250 -> 5 instance
...
...
...
以下是我的开始,但我被卡住了:
def num_of_times(n)
""" (int) => int
when n is entered count 1 for every 50 found. If any number is over 50, yet does not
equal another 50 (e.g. n = 60; 60 - 50 = 10; 50 -> 1; 10 -> 1) will call for a count, which would be a count of 2 in this case.
>>>num_of_times(60)
2
>>>num_of_times(200)
4
"""
count = 0
if n > 0 and n == 50:
count += 1
elif n > 50:
""" Here is where my thinking is going to sleep"""
...
...
...
提前感谢您提供的任何帮助。
答案 0 :(得分:2)
对于这个特定问题,你应该使用一个部门:
count = n // 50 + 1
(注意使用双斜线,而不仅仅是“/” - 那 你甚至在Python 3上执行整数除法, 结果响了下来,而不是给你一个浮点 价值作为结果)
现在,关于递归 -
它不是解决Python问题的首选方式 -
可能具有相同成本的重复函数
“为功能调用优化”中的“for循环”
与方案一样,语言最好处理for
或while
循环。
保持这个例子 - 并导致递归 - 你需要改变它们 您的数据输入以及每次交互时的结果 - 以便何时进行 您的数据不需要记录器处理,您最后得到了结果:
count = 0
while n >= 50:
count += 1
n -= 50
从这里开始,更容易检查递归方法应该做什么: 每次过度调用都应该收到“n”和“count”的修改值 比上一次迭代。你可以利用Python的优势 可选参数语法,以便第一次调用该函数 必须添加“count”参数:
def num_of_times(n, count=0):
if n < 50:
return count
return num_of_times(n - 50, count + 1)
由于在解释器上设置了调用堆栈深度,因此在Python中限制为n =约50000,并且默认最大重合深度设置为1000.您可以通过在{{1}中设置它来更改该数字}模块 - 但这不是Python中推荐的方法 - 无论是函数调用的开销,还是sys
和whie
结构的更高级别的工具。对于一些可以递归2到100次的函数来说显然是可以的,比如处理文件路径,URL部分等等 - 特别是如果函数最终比交互式对应函数更具可读性。
答案 1 :(得分:1)
递归似乎是最不实用的方法,但如果需要递归, 试试这个:
def num_of_times(n):
if n > 0 and n <= 50:
return 1
elif n > 50:
return 1+num_of_times(n - 50)
else:
return 0
答案 2 :(得分:0)
怎么样。
def num_of_times(n):
if n < 50:
return 0
return 1 + num_of_times(n - 50)
如果你所追求的结果不是1,每个dvisable为50,实际上在1到50 = 1之间,51到100 = 2之间,那么
def num_of_times(n):
if n <= 0:
return 0
elif n < 51:
return 1
return 1 + num_of_times(n - 50)