将以下迭代代码转换为递归 Python

convert following iterative code to recursive Python

6174 以印度数学家 D. R. Kaprekar 的名字命名为 Kaprekar 常数[1][2][3]。此数字值得注意的是以下 属性:

取任何四位数,至少使用两个不同的数字。 (允许使用前导零。) 将数字先降序排列,然后再按升序排列,得到两个四位数,必要时添加前导零。 从较大的数字中减去较小的数字。 返回第 2 步。

Dattaraya Ramchandra Kaprekar

number="0011" 

print(" helo world,  lets do this: " , number)
i = 0
while number != "6174":
 sortedS = sorted(number)                            
 String[] sortedString = array[4] av strangen number
 reversed = sorted(number, reverse=True)            
 sortedIntMin = int(sortedS[0]+sortedS[1]+sortedS[2]+sortedS[3])
 reversedIntMax = int(reversed[0]+reversed[1]+reversed[2]+reversed[3])  
 i += 1
 number = str(reversedIntMax - sortedIntMin)                                           
 reversedIntMax - sortedIntMin
 print("det behovdes " , i , "iterationer for processen")

这是我失败的尝试

def Kaprekar(number, i):
if number == 6174:
    return
elif number != 6174:
    sortedString = sorted(number)
    reversedString = sorted(number, reverse=True)
    sortedIntMin = int(sortedString[0]+sortedString[1]+sortedString[2]+sortedString[3])
    reversedIntMax = int(reversedString[0]+reversedString[1]+reversedString[2]+reversedString[3])
    num = reversedIntMax - sortedIntMin
    print("processen kors", num )
    return 1 + Kaprekar(str(num), i)

print(" helo world,  lets do this: ")
print("det behovdes " , Kaprekar("1547", 0) , "iterationer for processen")

number 是一个字符串,所以在前 2 个 if 语句中:

if number == '6174':
    return 1
else:

并且在另一个答案中 i 这里不需要变量。

错误的地方有三处:-

  1. 你不需要我。从函数定义中删除它。
  2. 您传递的变量是一个字符串,您正在将它与一个整数进行比较,比较时将其转换为字符串。
  3. 当 number='6174' 时,您需要 return 1,而您正在 returning None.
  4. 另外,如果list在sorted后加入,可以做的更清晰一些,可以直接转化为整数,(感谢endzior的修改)

    试试这个:-

    def Kaprekar(number):
        if number == '6174':
            return 1
        elif number != '6174':
            sortedString = ''.join(sorted(number))
            reversedString = ''.join(sorted(number, reverse=True))
            sortedIntMin = int(sortedString)
            reversedIntMax = int(reversedString)
            num = reversedIntMax - sortedIntMin
            print("processen kors", num )
            return  1 + Kaprekar(str(num))
    
    print(" helo world,  lets do this: ")
    print("det behovdes " , Kaprekar("1547") , "iterationer for processen")