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 to share