こんにちは私はかなり新しいPythonで、入力された数値がシーケンス内にない場合は、次のフィボナッチ数を加算して、指定された数値まですべての値を出力するフィボナッチ計算関数を作成しようとしています。リスト。たとえば、10を入力すると、[0, 1, 1, 2, 3, 5, 8, 13]
が返されます。関数は再帰的でなければならない。私は大規模なプログラムを変更することなく、それをスピードアップすることができますとにかく(私は再帰によるものと仮定)Fibonacciシーケンス計算機python
def fibonacci(n):
n = int(n)
# The nested sub_fib function computes the Fibonacci sequence
def sub_fib(n):
if n < 2:
return n
else:
return (sub_fib(n-1) + sub_fib(n-2))
#This aspect of the main fib function applies the condition if the number
# input is not in the sequence then it returns the next value up
fib_seq= [sub_fib(i) for i in range(0,n) if sub_fib(i)<=n]
if fib_seq[-1] < n:
fib_seq.append(fib_seq[-1] + fib_seq[-2])
return fib_seq
else:
return fib_seq
print(fibonacci(input("Input a number to print sequence up to: ")))
が、私はそれが仕事を得ることができたが、それは非常に遅いですがされています。ここに私の現在のコードはありますか?
それは再帰的であるとメモ化を使用していないためだそれ...再帰は本当に要件ですか? –
[Pythonでフィボナッチシーケンスを書く方法]の複製があります(http://stackoverflow.com/questions/494594/how-to-write-the-fibonacci-sequence-in-python) –
@WillemVanOnsem、不要memoization - ジェネレータとして_sub_fib_を再定義するのに十分です。 – volcano