所以我知道这是一个简单的事情,可以在没有递归函数的情况下完成,但我需要知道背面,因为我似乎无法弄清楚如何使用递归来编写它。我到目前为止使用这个
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但是如果我做了更长的数字那么它就不能正确打印它我不确定它到底是什么问题。
答案 0 :(得分: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)
答案 1 :(得分:1)
#!/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)