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

3

6174被称为卡普雷卡常数[1][2][3],以印度数学家D.R. Kaprekar命名。这个数字具有以下性质:

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

达塔拉亚·拉姆钦德拉·卡普雷卡

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")
2个回答

2

有三件事情是错误的:

  1. You don't need i. remove it from function definition.
  2. The variable you are passing is a string and you are comparing it with an integer, convert it to a string while comparing.
  3. You need to return 1 when number='6174', while you are returning None.
  4. Also, it can be done a bit clearer if list is joined after sorted and it can be directly converted to integer, (thanks endzior for the edit)

    try this : -

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

补充一下这个答案,如果给定字符串中的每个字符都是数字,那么您不需要调用字符串的每个字符来将其转换为int,只需调用int(sortedString)即可。 - Endzior

0

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

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

就像另一个答案中所述,这里不需要 i 变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接