Python编写递归函数

Python编写递归函数,python,recursion,Python,Recursion,这个问题与如何编写适合序列的递归函数有关,而不是以三角形的形式打印星星 我正在尝试编写一个python函数,它使用Pollard Rho方法来查找整数的因式分解。在这一点上,我一直在尝试编写一个小函数,它将发现f(n),这样: 其中,情况0到4的行为类似于: 我想我真的对如何设置基本情况和让函数调用自己来计算递归函数的请求迭代感到困惑。下面是一个对f(0)甚至不起作用的尝试: 当我尝试以下操作时,此尝试只是导致了一个错误“SyntaxError:无法分配给函数调用”: print f(0)

这个问题与如何编写适合序列的递归函数有关,而不是以三角形的形式打印星星

我正在尝试编写一个python函数,它使用Pollard Rho方法来查找整数的因式分解。在这一点上,我一直在尝试编写一个小函数,它将发现f(n),这样:

其中,情况0到4的行为类似于:

我想我真的对如何设置基本情况和让函数调用自己来计算递归函数的请求迭代感到困惑。下面是一个对f(0)甚至不起作用的尝试:

当我尝试以下操作时,此尝试只是导致了一个错误“SyntaxError:无法分配给函数调用”:

print f(0)

有谁能帮助我编写这样一个递归函数,使其与我的代码尝试上面的图片中描述的情况0到4的行为相匹配吗?

你几乎成功了!请注意,在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

你差点就成功了!请注意,在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

首先,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

首先,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

else区块中可能重复的
return f(xn-1)**2+1
else区块中可能重复的
return f(xn-1)**2+1
谢谢!我认为,在编写这部分代码时,我在阅读时过于执着于模糊的蓝图,让我在编程环境中编写递归函数时的不确定性分散了我的注意力。谢谢你建议的减少混乱的方法。谢谢!我认为,在编写这部分代码时,我在阅读时过于执着于模糊的蓝图,让我在编程环境中编写递归函数时的不确定性分散了我的注意力。谢谢你提出的减少混乱的方法。