将以下迭代代码转换为递归 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
这里不需要变量。
错误的地方有三处:-
- 你不需要我。从函数定义中删除它。
- 您传递的变量是一个字符串,您正在将它与一个整数进行比较,比较时将其转换为字符串。
- 当 number='6174' 时,您需要 return 1,而您正在 returning None.
另外,如果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")
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
这里不需要变量。
错误的地方有三处:-
- 你不需要我。从函数定义中删除它。
- 您传递的变量是一个字符串,您正在将它与一个整数进行比较,比较时将其转换为字符串。
- 当 number='6174' 时,您需要 return 1,而您正在 returning None.
另外,如果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")