2016-10-25 42 views
0

我試圖寫發現使用公式任何給定數量的斐波納契序列的程序: ˚F -n =(-1)n + 1個˚F n斐波納契序列使用遞歸負數蟒

我寫了積極的一面,它的工作原理,但我得到不停的遞歸,當我輸入一個負數。

def fib(n): 
    if n > -1: 
     if n == 0: 
      return 0 
     elif n == 1: 
      return 1 
     else: 
      return fib(n-1) + fib(n-2) 
    if n <= -1: 
     return ((-1)**(n+1)) + fib(n) 


num = eval(input("enter a number: ")) 
print("The value of the fibonacci series for the number", num, "is: ", fib(num)) 
+2

負的斐波納契數不存在。 –

+0

對不起,男士,但定義確實存在邏輯擴展。 f(n-2)= f(n)-f(n-1)。你繼續工作遠離0. – Prune

+1

Eval在用戶輸入... omgomgomgomgomgomgomgomg運行! **: - D ** @aqueduct,查看http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html – BorrajaX

回答

1

對於消極的一面,你最後一句,你必須調用FIB(N)ñ絕對值。

if n <= -1: 
    return ((-1)**(n+1)) + fib(-n) # Note the negation; abs(n) would also work. 

如果硬要直接計算它,你需要保持的關係:

f(n) = f(n-1) + f(n-2) 

爲了解決這個問題的至少號:

f(n-2) = f(n) - f(n-1) 

...和然後歸一化爲當前負值:let j = n-2:

f(j) = f(j+2) - f(j+1) 

你能處理從那裏的變化?