我正在尝试将循环转换为递归算法。相当简单,我只是不能让它在求和的时候忽略n值,就像range那样。你知道吗
这是迭代函数:
def function(n):
total=0
for i in range(1,n,2):
total += i
print(total)
function(5) # Output: 4
这是我尝试过的递归方法:
def function1(n):
if n==1:
return n
else:
return n+function1(n-2)
function(5) # Output: 9
所以function1
在应该被忽略的时候对n
求和。原因range()
不包括停车编号。你知道吗
然后,我试着:
def f1(n):
def f_recursive(n):
if n==1 or n==2:
return 1
elif n==0:
return 0
else:
return n + f_recursive(n - 2)
return f_recursive(n) - n
print(f1(5)) # Output: 4 Yeiii!!
但后来我意识到,这只适用于奇数。甚至都不是。如果f1(6)
,那么当它应该是9
时,就得到了4
,因为它最终是11-6=9。你知道吗
我真傻,我试过:
def f1(n):
def f_recursive(n):
if n==1 or n==2:
return 1
elif n==0:
return 0
elif n%2 == 0:
return n + f_recursive(n - 3)
elif n%2 == 1:
return n + f_recursive(n - 2)
return f_recursive(n) - n
print(f1(6))
当然这也不起作用。我不是很理解递归吗?你知道吗
棘手的部分是排除上限。如果上限是您唯一的参数
n
,那么您必须知道它何时是第一个调用,何时是中间(递归)调用。或者,如果内部函数正常,您可以从1开始一直数到n
:要计算从1到n(但不包括n)的所有奇数整数之和
剩下两种可能性:
n
为<;=1,则没有要求和的数字,因此求和为0。你知道吗n-1
,但前提是它是奇数。不管是哪种方式,剩余的和是“从1到,但不包括,n-1的所有奇数整数的和”(听起来很熟悉吗?)你知道吗这意味着:
递归的问题是返回的是
n
,而不是当前所在的范围(列表)中的值,这会带来一个问题,因为n
不包含在范围内,不应添加到最终的总数中理想情况下,您需要反转逻辑并以相同的方式遍历它
相关问题 更多 >
编程相关推荐