2013-04-17 37 views
0

我完全陌生的Python和我想打印一個遞推數列的解決方案:爲什麼遞歸序列無法正確工作?

#Input sequence variables 

a = float(raw_input("type in a = ")) 
n0 = int(raw_input("type in n_0 = ")) 
n1 = int(raw_input("type in n_1 = ")) 
y0 = float(raw_input("type in y_0 = ")) 


#Define function y_n (forward iteration) 

def yn(n): 
    if (n==0): 
     return y0 
    else: 
     return (1/n)-a*yn(n-1) 

#backward iteration 

def yn_back(n): 
     return (1/a)*((1/n)-yn(n-1)) 

if(n1>=n0): 
    for i in range(n0,n1+1): 
     print(yn(i)) 

else: 
    for i in range(n0,n1+1): 
     print(yn_back(i)) 

但是,如果我運行此腳本a=5n0=1n1=30y0=log(5/6)=0.182322的解決方案是非常高(從0.088393.29e+18)並且這些值對於偶數n是負的。該解決方案適用於n=1。對於其他nyn(n)定義中的(1/n)似乎被忽略。

有人可以幫助我嗎?

非常感謝!

回答

1

n可能是一個整數,所以1/n正在恢復0n大於1:

>>> 1/1 
1 
>>> 1/2 
0 
>>> 1.0/2 
0.5 

要確保你使用的浮動分立,變更11.0無論你計算1/n

(1.0/n) 

或將n轉換爲float

+2

甚至更​​好:'from __future__ import division' – ThiefMaster

+0

非常感謝! –

+0

我還有一個問題:我想輸入y0的數學函數(例如log(6/5))。但即使輸入「math.log(6/5)」,它也無法轉換爲浮點數。如何管理? –