【问题标题】:convert following iterative code to recursive Python将以下迭代代码转换为递归 Python
【发布时间】:2015-08-22 05:32:51
【问题描述】:

6174 在印度数学家 D. R. Kaprekar 之后被称为 Kaprekar 常数[1][2][3]。这个数字值得注意的是以下属性:

取任意四位数字,至少使用两个不同的数字。 (允许前导零。) 将数字按降序排列,然后按升序排列,得到两个四位数,必要时添加前导零。 从较大的数字中减去较小的数字。 返回第 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")

【问题讨论】:

    标签: python recursion iteration


    【解决方案1】:

    有三件事是错误的:-

    1. 你不需要我。从函数定义中删除它。
    2. 您传递的变量是一个字符串,并且您将它与一个整数进行比较,在比较时将其转换为字符串。
    3. 当 number='6174' 时需要返回 1,而返回 None。
    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")
      

    【讨论】:

    • 要添加到这个答案,您不需要调用字符串的每个字符将其转换为 int,如果给定字符串的每个字符都是数字,您可以调用 int(sortedString)例如。
    【解决方案2】:

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

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

    和另一个答案一样,这里不需要i 变量。

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-26
      • 2017-03-05
      相关资源
      最近更新 更多