Python 递归斐波那契级数中的重复
我正在尝试编写一个方法,使用递归打印第一个Python 递归斐波那契级数中的重复,python,recursion,Python,Recursion,我正在尝试编写一个方法,使用递归打印第一个nnumbersfibonacci序列。 我不想编写该方法,然后在该方法之后创建一个单独的循环,以打印出第一个nfibonacci系列。我尝试使用try和finally块,因为我知道finally语句将始终执行。fibonacci系列输出工作正常,但不断重复。有可能停止重复吗 def fibonacci(n): if n <= 1: return n try: fib = fibonacci(n-1)
n
numbersfibonacci
序列。
我不想编写该方法,然后在该方法之后创建一个单独的循环,以打印出第一个
n
fibonacci
系列。我尝试使用try
和finally
块,因为我知道finally
语句将始终执行。fibonacci
系列输出工作正常,但不断重复。有可能停止重复吗
def fibonacci(n):
if n <= 1:
return n
try:
fib = fibonacci(n-1) + fibonacci(n-2)
return fib
finally:
print("F{} = {}".format(n, fib))
fibonacci(6)
这是可能的,但是您需要有一个非本地值来记住是否已经打印了一个数字。一种简单的方法是使用闭包和本地定义的函数:
def fibonacci(n):
done = -1
def fibo(n):
nonlocal done
if n <= 1:
fib = n
else:
fib = fibo(n-1) + fibo(n-2)
if n > done:
print("F{} = {}".format(n, fib))
done = n
return fib
fibo(n)
您可以使用如下默认参数:
def fibonacci(n, a=1, b=1):
if n==0:
return;
else:
print(a)
fibonaci(n-1, b, a+b)
fibonacci(10)
Output:
1
1
2
3
5
8
13
21
34
55
对代码进行相当小的更改将避免不必要的递归,然后只打印(我希望)您想要的内容
def fibonacci(n):
如果n可以将函数设为生成器,并在打印语句中使用解包(如果需要,使用新的行分隔符):
您也可以在函数中使用打印函数,但这就是函数的操作方式:
def fibo(n,a=0,b=1):
print(a)
if n>1:fibo(n-1,b,a+b)
fibo(10)
顺便说一句,现代版本的斐波那契数列从零开始“我不想写这个方法,然后在这个方法之后创建一个单独的循环来打印出第一个n个斐波那契数列”为什么?递归迫使你在每个阶段递归地重新计算2个值。因此,将print语句放在递归函数中会显示一些您不想看到的内容。我会生成这些值,并将结果显示在别处。你可以试试dp备忘录。设置为dict,然后打印dict.@MetallimaX听起来很有用。我可以简单地在外面形成一个单独的循环。只是想知道有没有更好的办法way@deadshot这是每个人都做的事。只是想看看有没有更好的办法
def fibonacci(n, a=1, b=1):
if n==0:
return;
else:
print(a)
fibonaci(n-1, b, a+b)
fibonacci(10)
Output:
1
1
2
3
5
8
13
21
34
55
F1 = 1
F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
def fibo(n,a=0,b=1):
yield a
if n>1:
yield from fibo(n-1,b,a+b)
print(*fibo(10),sep="\n")
0
1
1
2
3
5
8
13
21
34
def fibo(n,a=0,b=1):
print(a)
if n>1:fibo(n-1,b,a+b)
fibo(10)