所以我知道这是一个简单的事情,可以在没有递归函数的情况下完成,但我需要知道它的背面,因为我似乎不知道如何使用递归来编写它。我到目前为止正在使用这个
n = int(raw_input("What is n? "))
def digit(n):
if n< 10:
return 1
else:
new = n/10
print 1 + digit(new/10)
return 1 + digit(new/10)
digit(n)
现在,如果我输入一个数字,例如 33,那么它会输出 2,但是如果我输入更长的数字,那么它就无法正确打印,而且我不确定它到底出了什么问题。
问题是,
new = n/10
return 1 + digit(new/10)
您已经在
new = n / 10
中将数字除以 10,这会减少最后一位数字,并且在调用 digit
之前再次将其除以 10。因此,您在每次递归调用中都会忽略 1 位数字。
相反,你可以简单地做
return 1 + digit(n / 10)
或
new = n / 10
return 1 + digit(new)
#!/usr/bin/python
n = int(raw_input("What is n? "))
def digit(n):
if n < 10:
return 1
else:
return 1 + digit(n/10)
print digit(n)
你也可以这样做。
def counter(number):
if(number == 0):
return 0
return counter(int(number/10)) + 1
number = 1998
print(counter(number)) // it will print 4
n = int(raw_input("n 是什么?"))
定义数字(n): 如果 n < 10: return 1 else: return 1 + digit(n/10)
打印数字(n)