在没有全局变量的情况下计算两个整数之间的匹配位数

问题描述 投票:0回答:4

我正在尝试编写一个函数,通过递归输出两个整数之间的匹配位数。

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 会重置每个递归。我该怎么做?

python recursion
4个回答
1
投票

您的尝试存在几个问题:

  • 循环中的无条件

    return
    将使循环在第一次迭代时退出,因此永远不会有第二次迭代。事实上,不需要迭代,因为您使用递归来访问所有数字。
    
    

  • 由于上一点,您无需区分
  • for

    和其他情况。

    
    

  • 基本情况
  • number1 >= number2

    不正确。当两个数字之一只有一位数时,您还应该结束递归。所以这应该是

    number1 == 0 or number2 == 0
    
    

  • 在基本情况下,您仍然应该检查两个数字是否相同。如果是,则返回 1,否则返回 0
  • 在递归情况下,取出递归调用的结果,当当前两位数相等时加 1。不等于时,不加1。
  • 您可以利用 Python 中布尔值(表达式)可以转换为 int 的事实。

这是建议的代码:

number1 < 10 or number2 < 10



0
投票

祝你好运;)

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)



0
投票

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)}")



-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.