【问题标题】:Iterative to Recursive format迭代到递归格式
【发布时间】:2020-11-14 12:48:07
【问题描述】:

我发现很难以递归格式编写下面提到的代码(Int to Binary)。请帮助我清除我的疑问,即我缺少什么来实现这种转换。

代码如下:

class Stack:
   
   def __init__(self):
     self.number = []

   def push(self, number):
     self.number.append(number)

   def pop(self):
     return self.number.pop()

   def is_empty(self):
     return self.number == [] 

   def int_to_binary(number):
     s = Stack()
     while number > 0:
        remainder = number % 2
        s.push(remainder)
        number = number // 2

     set =''
     while not s.is_empty():
        set += str(s.pop())
        print(set)
   print(int_to_binary(243))

【问题讨论】:

  • 在递归代码中,您将状态保存在(调用)堆栈上。在您的迭代代码中,您已经将状态保存在堆栈中。只需移除堆栈并将状态移动到调用堆栈即可。
  • 请记住,递归版本可能会导致大量数字的堆栈溢出

标签: python recursion stack iteration


【解决方案1】:

查看问题的迭代解决方案以将其转换为递归解决方案通常毫无帮助。 Insetad,你需要从一开始就递归地思考。就像每个编程问题一样,您应该从用文字描述解决方案开始。但是现在我们需要用递归的方式而不是迭代的方式来描述它。

我们首先描述所有基本情况:

n = 0 的二进制表示是'0'

n = 1 的二进制表示是'1'

然后我们描述递归的情况:

数字n 的二进制表示是n 除以2(没有余数)后跟n mod 2 的二进制表示。

注意描述是如何自我引用的。这就是递归的原因。

【讨论】:

    猜你喜欢
    • 2012-01-23
    • 2018-06-19
    • 2016-01-05
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    相关资源
    最近更新 更多