Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 迭代到递归格式_Python_Recursion_Stack_Iteration - Fatal编程技术网

Python 迭代到递归格式

Python 迭代到递归格式,python,recursion,stack,iteration,Python,Recursion,Stack,Iteration,我发现很难用递归格式编写下面提到的代码(Int到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(s

我发现很难用递归格式编写下面提到的代码(Int到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))

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

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

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

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

然后我们描述递归情况:

数字
n
的二进制表示法是
n
除以2(不含余数),然后再除以
n
mod 2


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

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