【问题标题】:Generate all permutations of digits in an number of unknown length without using recursion在不使用递归的情况下生成未知长度的所有数字排列
【发布时间】:2017-06-20 14:54:07
【问题描述】:

我的许多朋友和老师都争辩说,在不使用递归的情况下找到所有可能的数字排列的程序是不可能的,虽然有人说这是可能的,但很棘手。所以我需要一些帮助来解决这个问题。 谢谢。

【问题讨论】:

  • Permutation 是关于用多个元素设置的......“一个(一个)数字的排列”没有意义......那么“一个数字的排列”是什么意思
  • @Selvin 不,可以使用集合定义自然数 :) en.wikipedia.org/wiki/…
  • 所有可以用递归完成的事情也可以用循环和堆栈来完成——事实上,递归基本上就是这样做的:将数据放在堆栈上,然后通过再次调用该方法来进行另一个“迭代” .
  • 自然的数字可以使用集合来定义 ...他写了“数字的排列”...而集合可以是一个元素那么只有一个排列......也许他在谈论数字中的数字排列?

标签: java bluej


【解决方案1】:

递归是函数调用自身的行为。在幕后,函数调用被推送到系统的堆栈中,当一个函数完成执行时,它将从堆栈中弹出。堆栈是一种存储项目的数据结构,具有以下操作:

  • push:将一个项目放到堆栈的末尾
  • pop:从栈尾移除一项并返回
  • top:返回栈尾的项

您需要定义堆栈将存储的内容。在我们的例子中,这可能是当前的、可能未完成的排列。如果您想要一个迭代解决方案,您的工作就是自己处理堆栈。

【讨论】:

  • 我不能使用递归或堆栈,只能使用简单的循环语句。
  • @darker_speck 我没有建议你应该使用递归。我说的是非递归实现。为此,您需要一个堆栈,用于存储操作的当前状态。没有堆栈就无法解决这个问题。
猜你喜欢
  • 2011-09-05
  • 1970-01-01
  • 1970-01-01
  • 2012-05-26
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2012-05-05
相关资源
最近更新 更多