Convert the following iterative code to recursive Python

6174 is known as the Kaprekar constant [1] [2] [3] after the Indian mathematician DR Kaprekar. This number has the following property:

Take any four-digit number using at least two different numbers. (Leading zeros are allowed.) Arrange the numbers in descending order, then in ascending order to get two four-digit numbers, adding leading zeros. Subtract the smaller number from the larger number. Return to step 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")

      

This is my failed attempt

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

      

+3


source to share


2 answers


there are three wrong things: -



  • You don't need to. remove it from the function definition.
  • The variable you are passing is a string and you are comparing it to an integer, converting it to a string when comparing.
  • You need to return 1 when number = '6174' until you return None.
  • Also, it can be made a little clearer if the list is concatenated after sorting and can be directly converted to an integer (thanks endzior for editing)

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

+2


source


number

is a string, so in the first two if cases:

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

      



And like the other answer i

doesn't need a variable here.

0


source







All Articles