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