Skip to main content
 首页 » 编程设计

python之为什么 while 在这里一直循环有人可以解释吗

2025年05月04日20落叶

我有下面的代码来生成斐波那契数列直到'num'

def fibo(num,a=0,b=1): 
    while b <= num: 
        print(b) 
        a, b = b, a+b 
        fibo(num,a,b) 
fibo(30) 

下面是输出。但是,如果我在我的代码中使用“if”而不是“while”,它就可以正常工作。但是我想知道 while here 有什么问题..

1 
1 
2 
3 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
3 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
2 
3 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
3 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
1 
2 
3 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
3 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
2 
3 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
3 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 
5 
8 
13 
21 
21 
13 
21 
21 
8 
13 
21 
21 
13 
21 
21 

请您参考如下方法:

您正在调用 loop 以及 fibo 函数的递归。您只需要使用一个,以便此函数与 if 和 recursion 一起使用:

def fibo(num,a=0,b=1): 
    if b <= num: 
        print(b) 
        a, b = b, a+b 
        fibo(num,a,b) 

等于此函数有 while 和 没有 递归:

def fibo(num,a=0,b=1): 
    while b <= num: 
        print(b) 
        a, b = b, a+b 

基本上,如果您同时保留它们,您将在循环内的每个循环中调用 fibo 函数,并且每次调用都会创建一个新循环,在该循环中它会被一次又一次地调用。

重要提示

在 Python 中使用迭代函数比递归更好。这是因为 Python 不会优化 tail-recursion .