2015-12-03 35 views
1

這是我做過的循環:UnboundLocalError當我試圖從循環遞歸?

def cont_frac(k): 

    n=1 

    tempk=k 
    x=0 
    D=2.0 

    if k<1: 
     print("Invalid Input") 
    else: 
     while tempk>1: 
      n=n+2 
      tempk=tempk-1 

     while(k>=1): 
      N=n*n 
      x=N/(D+x) 
      n=n-2 
      k=k-1 

這是我做過的遞歸

n=1 

k=int(input("enter the value of k:")) 

p=k 

def n_inc(tempk): 

    while tempk>1: 

     n=n+2 

     tempk=tempk-1 

    return n 

def conts_frac(k): 
    x=0 

    D=2.0 

    if k<1: 
     print("invalid Input") 
    else: 
     n_inc(p) 
     N=n*n 
     x=N/(D+x) 
     n=n-2 
    return conts_frac(k-1) 


conts_frac(k) 

現在的問題是,爲什麼這個錯誤UnboundLocalError在遞歸部分產生?

UnboundLocalError: local variable 'n' referenced before assignment 
+0

因爲你在全局範圍聲明瞭''n,所以當你在函數內部做了'n = n-2'時,它試圖分配'n = n-2',即試圖賦值'n'作爲局部變量,因爲全局變量並沒有隱式包含在方法定義的範圍內。 –

+0

所以我應該在函數方法(n_inc)中聲明n?刪除此錯誤。對不起,我是一個編程新手,所以我有點困惑。 –

+1

[Python變量範圍錯誤]的可能重複(http://stackoverflow.com/questions/370357/python-variable-scope-error) – GingerPlusPlus

回答

1

由於混合了全局變量和局部變量,所以出現此錯誤。你可以通過使用main()來解決這個問題。一般來說,除了import語句之外,除函數定義之外的任何東西都是不好的做法。

基本上,當你在一個函數外定義一個變量時,你可以定義它爲整個程序的。當你在一個函數中定義一個變量時,你只能爲該函數定義它只有,並且不能在該函數之外被引用。何時何地使用變量稱爲其範圍

你n定義爲一個全局變量在這裏:

n = 1 

再後來重新定義它n_inc作爲一個局部變量

n = n + 2 

這意味着現在n是一個局部變量,你不能用它在conts_frac中。您可以通過重命名變量,實現主函數或調整函數參數來使用n來解決此問題。我希望這個幫助,祝你好運米爾扎!

編輯:我剛剛注意到有人評論指出了這一點。我希望這至少有助於澄清他的意思。

+0

*除了導入語句**和類**之外,通常除函數定義之外的任何東西都是不好的練習* – GingerPlusPlus