Python 迭代斐波那契

Python Iterative Fibonacci

听着,我知道有上千篇关于此的帖子,我花了三个小时查看所有帖子。我知道这段代码不起作用的原因很简单,但我想不通。当它运行时,我只希望它 return 第 n 项。我是 python 的新手,也许有些逻辑我不明白。所以当我这样做时:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    i = 0
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        print nextterm

print(fib(n))

我明白了:

1
1
2
3
5
None

当我这样做时:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    i = 0
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        return nextterm

print(fib(n))

我刚得到“1”

我花了这么多时间在这上面,我很困惑。有人请修理我!

您只是忘记了 return 值:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    i = 0
    nextterm = 1
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        #print nextterm

    return nextterm

print(fib(n))

在第一种情况下你没有返回任何东西,所以当你 print(fib(n)) 时,由于 python 没有找到任何 return 语句,它 returns None,这是你看到的最后一个打印,其他的是循环内的。在第二种情况下,您在 while 循环中有 return 语句,因此当它执行第一次迭代时,它 returns 1 超出框架并且没有其他迭代被执行,所以它只打印 '1'.

def fibonacci():
    num = int(input("How many numbers that generates?:"))
    i = 1
    if num == 0:
        fib = []
    elif num == 1:
        fib = [1]
    elif num == 2:
        fib = [1,1]
    elif num > 2:
        fib = [1,1]
        while i < (num - 1):
            fib.append(fib[i] + fib[i-1])
            i += 1
    return fib
print(fibonacci())

因为return只有return一次,第一次return就搞定了,

更清晰的示例:

 def f():
     return 'good'
     return 'bad'

现在:

print(f())

Returns:

'good'

另一方面,这也是一种解决方法:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    l=[]
    i = 0
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        l.append(nextterm)
    return '\n'.join(str(i) for i in l)
print(fib(n))

print不做另一个打印:

n = int(input("What Fibonacci number would you like to find? "))

def fib(n):
    i = 0
    present = 1
    previous = 0

    while i < n:
        nextterm = present + previous
        present = previous
        previous = nextterm
        i = i + 1
        print(nextterm)
fib(n)