Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 局部变量';i';分配前参考_Python_Recursion - Fatal编程技术网

Python 局部变量';i';分配前参考

Python 局部变量';i';分配前参考,python,recursion,Python,Recursion,在尝试一些基于递归的问题时,遇到了这个错误 “i”是位数,以1递增。我哪里出错了 通过重复除以10确定位数 i=0 def dig(n): 如果n

在尝试一些基于递归的问题时,遇到了这个错误

“i”是位数,以1递增。我哪里出错了

通过重复除以10确定位数
i=0
def dig(n):
如果n<10:
i+=1
返回
其他:
i+=1
挖掘(n//10)
印刷品(一)
挖掘(123)

您的代码有几个问题。您在函数外部定义了
i
,但仅在函数内部使用,这是主要问题的根源。但是,您的函数也有几个逻辑错误

看起来你想要的是:

def dig(n):
    if n < 10:
        return 1
    else:
        return 1 + dig(n//10)


print(dig(123))
请注意,这有一个问题,即它只工作一次。如果您再次调用它,您必须首先再次将
数字
重置为
0
。这不是最好的方法,避免全球变暖通常是个好主意

如果需要函数包含对
print()
的调用,而不是打印结果,则可以修改第一个解决方案,如下所示:

def dig(n, c=1):
    if n < 10:
        print(c)
    else:
        dig(n//10, c+1)


dig(123)

您的代码有几个问题。您在函数外部定义了
i
,但仅在函数内部使用,这是主要问题的根源。但是,您的函数也有几个逻辑错误

看起来你想要的是:

def dig(n):
    if n < 10:
        return 1
    else:
        return 1 + dig(n//10)


print(dig(123))
请注意,这有一个问题,即它只工作一次。如果您再次调用它,您必须首先再次将
数字
重置为
0
。这不是最好的方法,避免全球变暖通常是个好主意

如果需要函数包含对
print()
的调用,而不是打印结果,则可以修改第一个解决方案,如下所示:

def dig(n, c=1):
    if n < 10:
        print(c)
    else:
        dig(n//10, c+1)


dig(123)

下面是正确的递归函数:

def dig(n, i = 0):
    #base case
    if n < 10:
        return i + 1
    #recursion
    return dig(n//10, i + 1)

print(dig(123))
#output: 3
def dig(n,i=0):
#基本情况
如果n<10:
返回i+1
#递归
回挖(n//10,i+1)
印刷(dig(123))
#产出:3

以下是正确的递归函数:

def dig(n, i = 0):
    #base case
    if n < 10:
        return i + 1
    #recursion
    return dig(n//10, i + 1)

print(dig(123))
#output: 3
def dig(n,i=0):
#基本情况
如果n<10:
返回i+1
#递归
回挖(n//10,i+1)
印刷(dig(123))
#产出:3

问题中提到存储变量中的位数并递增。调用
dig()
后,我忘记打印i,而不是为每个循环打印i:问题中提到PIt是存储变量中的位数并递增。调用
dig()
后,我忘记打印i,而是为每个循环打印i:P