我正在尝试编写一个函数,通过递归输出两个整数之间的匹配位数。
def digit_match(number1, number2):
n1 = number1 // 10
n2 = number2 // 10
d1 = number1 % 10
d2 = number2 % 10
if number1 == 0 or number2 == 0:
return ????
if number1 >= number2:
if d1 == d2:
for i in range(len(str(number2))):
return digit_match(n1, n2)
else:
return digit_match(n1, n2)
elif number1 < number2:
if d1 == d2:
for i in range(len(str(number1))):
return digit_match(n1, n2)
else:
return digit_match(n1, n2)
我试图获取初始 number1 或 number2 与最终 n1 或 n2 之间的位数差异,但我不能,因为 number1 和 number2 在每次递归中都会重置为零。
问题是,我不能使用全局或函数外部定义的任何内容,并且该函数应该只接受 2 个整数,即正在检查数字的数字
123456 和 3456 将输出 4。12345 和 54321 将输出 1.. 我试图通过初始和最终 num1 或 num2 之间的差异来获得输出,但我不能这样做,因为 num1 和 num2 会重置每个递归。我该怎么做?
您的尝试存在几个问题:
循环中的无条件
return
将使循环在第一次迭代时退出,因此永远不会有第二次迭代。事实上,不需要迭代,因为您使用递归来访问所有数字。
for
和其他情况。
number1 >= number2
不正确。当两个数字之一只有一位数时,您还应该结束递归。所以这应该是
number1 == 0 or number2 == 0
。
这是建议的代码:
number1 < 10 or number2 < 10
祝你好运;)
def digit_match(number1, number2):
is_same = int(number1 % 10 == number2 % 10)
if number1 < 10 or number2 < 10:
return is_same
return is_same + digit_match(number1 // 10, number2 // 10)
def digit_match(number1, number2, n_of_recursion=0):
n1 = number1 // 10
n2 = number2 // 10
d1 = number1 % 10
d2 = number2 % 10
if number1 == 0 or number2 == 0:
return n_of_recursion
if number1 >= number2:
if d1 == d2:
for i in range(len(str(number2))):
return digit_match(n1, n2, n_of_recursion + 1)
else:
return digit_match(n1, n2, n_of_recursion)
elif number1 < number2:
if d1 == d2:
for i in range(len(str(number1))):
return digit_match(n1, n2, n_of_recursion + 1)
else:
return digit_match(n1, n2, n_of_recursion)
a = 75034538
b = 15534548
print(f"Number of recursions : {digit_match(a, b)}")
def digit_match(number1, number2, l=[]):
if number1 != 0 or number2 != 0:
d1 = number1 % 10
str1 = str(number1)
str2 = str(number2)
con2 = len(str2) ==1 and str2 not in str1
if len(str1) != 0 and len(str2) != 0:
if str(d1) in str2:
l.append(d1)
number1 = number1 // 10
#if the number1 becomes single digit the quotient will become zero. to restrict this
if number1 != 0:
st_number1 = str(d1)
index = str2.index(st_number1)
str2 = str2[:index]+ str2[index+1:]
#If number2 is smaller after appending the last digit, number2 becomes empty string. to restrict this
if str2 != '':
number2 = int(float(str2))
digit_match(number1, number2, l)
else:
number1 = number1 // 10
number2 = int(float(str2))
digit_match(number1, number2, l)
return len(l)
#case-1
n1 = 345687123
n2 = 345678
r = digit_match(n1, n2)
print(r)
#output: 6
#case-2
n1 = 345678
n2 = 345687123
r = digit_match(n1, n2)
print(r)
#output: 6