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

时间:2015-06-07 19:16:18

标签: python recursion iteration

在印度数学家D. R. Kaprekar之后,6174被称为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")

2 个答案:

答案 0 :(得分:2)

有三件事是错的: -

  1. 你不需要我。将其从功能定义中删除。
  2. 您传递的变量是一个字符串,您将其与整数进行比较,并在比较时将其转换为字符串。
  3. 当您返回时,您需要在号码=' 6174'时返回1。
  4. 此外,如果列表在排序后加入并且可以直接转换为整数,则可以更清楚一点(感谢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")
    

答案 1 :(得分:0)

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

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

正如另一个答案i变量在这里不需要。