当我尝试从循环进行递归时UnboundLocalError?

时间:2015-12-03 17:11:17

标签: python recursion

这就是我所做的循环:

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

1 个答案:

答案 0 :(得分:1)

您收到此错误是因为您混淆了全局变量和局部变量。您可以通过使用main()解决此问题。通常,除了import语句之外的任何函数定义之外的任何东西都是不好的做法。

基本上,当您在函数之外定义变量时,可以为程序的整个定义变量。在函数内部定义变量时,为该函数定义,并且不能在函数外部引用。可以使用变量的位置和时间称为范围

您在此处将n定义为全局变量:

n = 1

然后在n_inc中将其重新定义为局部变量

n = n + 2

这意味着n现在是一个局部变量,你不能在conts_frac中使用它。您可以通过重命名变量,实现主函数或调整函数参数来使用n来解决此问题。我希望这有帮助,祝你好运米尔扎!

编辑:我刚注意到有人评论指出了这一点。我希望这至少有助于澄清他的意思。