Python Iterative Fibonacci [关闭]

问题描述 投票:0回答:4

听着,我知道有关于此的一千个帖子,我花了三个小时看着它们。我知道这个代码不起作用的原因很简单,但我无法弄明白。当它运行时,我只希望它返回第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”

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

python fibonacci
4个回答
2
投票

你只是忘了返回值:

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))

0
投票

因为return只返回一次,第一次返回完成,

更清楚的例子:

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

现在:

print(f())

返回:

'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)

0
投票

在第一种情况下,你没有返回任何东西,所以当你print(fib(n)),因为python没有找到任何return语句,它返回None,这是你看到的最后一个打印,其他是循环内的那些。在第二种情况下,你在return循环中有while语句,所以当它执行第一次迭代时它返回1,离开帧并且没有执行其他迭代,所以它只打印'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())
© www.soinside.com 2019 - 2024. All rights reserved.