我试图将下面的代码转换为递归函数,但似乎我很难混淆如何在递归函数中编写。可以帮我提一些想法吗?
基本上,我在下面生成的是前n个奇数的总和。
def sum_odd_n(n):
total=0
j=2*n-1
i=1
if i>j:
return 1
else:
total =((j+1)/2)**2
i+=2
return total
> >>> sum_odd_n(5)
> 25.0
> >>> sum_odd_n(4)
> 16.0
> >>> sum_odd_n(1)
> 1.0
答案 0 :(得分:1)
这有点像家庭作业,所以我会提供一些建议而不是解决方案。
递归就是表达一个问题。
假设您知道从N到N-2的奇数之和。 你能用这个总和和函数本身(或相关的辅助函数)来写总和吗?
答案 1 :(得分:1)
递归函数至少有一个基本案例和至少一个递归调用。以下是一些提示:
def f(n):
# Base case - for which
# n do we already know the answer
# and can return it without
# more function calls? (Clearly,
# this must also terminate any
# recursive sequence.)
if n == ???:
return ???
# Otherwise, lets say we know the answer
# to f(n - 1) and assign it to
# the variable, 'rest'
rest = f(n - 1)
# What do we need to do with 'rest'
# to return the complete result
return rest + ???
填写问号,你就会得到答案。
答案 2 :(得分:1)
尝试:
def sum_of_odd(n):
if n>0:
x=(n*2)-1
return x+sum_of_odd(n-1)
else:
return 0
答案:
sum_of_odd(5)
将是:
25
答案 3 :(得分:0)
尝试:
def sum_odd_n(n):
if n>0:
if n==1:
return 1
else:
return 2*n-1 + sum_odd_n(n-1)