这个问题与如何编写一个递归函数有关,该函数适合不以三角形形式打印星形的序列。
我正在尝试编写一个python函数,它使用Pollard Rho方法查找整数的分解。在这一点上,我一直试图写一个小函数,它会找到f(n),这样:
其中案例0到4的行为类似于:
我想我真的很困惑如何设置基本情况并让函数调用自己来计算递归函数的请求迭代。以下是对f(0)甚至不起作用的尝试:
def f(xn):
if xn == 0:
answer = 2
return answer
else:
x = xn
f(0) = 2
f(xn) = f(x - 1)^2 + 1
return f(xn)
当我尝试时,此尝试只会导致错误“SyntaxError:无法分配给函数调用”:
print f(0)
任何人都可以请求如何编写这样一个与案例0到4的行为相匹配的递归函数,如我的代码尝试上图所示?
答案 0 :(得分:3)
你几乎拥有它!请注意,取幂不是python中的运算符^
,而是**
。
def f(xn):
if xn == 0:
answer = 2
return answer
else:
answer = f(xn - 1)**2 + 1
return answer
分配给函数调用是代码中的语法错误。相反,您应该调用该函数并将结果分配给局部变量(此处称为answer
)。
以更简单的方式编写相同的函数:
def f(xn):
return (1 + f(xn-1)**2) if xn else 2
答案 1 :(得分:3)
首先,python中的幂运算符为**
,您也不需要一些额外的操作,如x = xn
和f(0) = 2
:
>>> def my_func(n):
... if n == 0 :
... return 2
... return my_func(n-1)**2 +1
...
>>> my_func(1)
5
>>> my_func(2)
26
>>> my_func(3)
677