2

我正在尝试编写一个 Matlab 以按字典顺序列出数字 1 到 n 的所有排列。到目前为止我所拥有的如下。我正在使用递归来尝试编写一个首先适用于 n=3 的程序,然后看看我是否可以深入了解为任何 n 编写程序。到目前为止,对于 n=3: ,我有 6 列中的 2 列P=[1 2 3;1 3 2]。我需要接下来的两列来简单地交换一个和两个。我不知道如何开始这样做。

function [P] = shoes(n)

if n == 1
    P = 1;
elseif n == 2
    P = [1 2; 2 1];
else 
    T = shoes(n-1) + 1;
    G = ones(factorial(n-1),1);
    P(1:2,1:3) = [G T];               
end
4

2 回答 2

2

请参阅文档开始。如果按字典顺序,您的意思是按英文名称的字母顺序,您可能希望用名称填充您的输入,对它们进行排序,然后对其进行置换。

如果我误解了您想要的内容,请发表评论或编辑问题,稍后我会回来查看。

提示:

  • 空列表的排列很容易找到。
  • 归纳是数学中的一个重要概念。你应该熟悉它。
  • 您工作的环境支持递归
  • 较长列表的排列可以通过递归按照您想要的顺序产生;首先弄清楚你想要第一个元素是什么,然后找出其余的。

如果您再次陷入困境,请编辑发布您到目前为止所获得的内容以及您认为自己陷入困境的位置/原因的问题。

看到你的代码后的提示。

  • 您的核心函数置换一个向量,因此应该将向量作为参数,而不是整数
  • 不要开始解决 n=3 的情况;尝试 n=0 的情况(它是 []),然后直接转到 n=20 的情况。
  • 在编写任何代码之前,请考虑 n=20 的情况。第一列会是什么样子?在 n=20 案例的答案中是否隐藏了 n=19 案例的示例?(答案是肯定的,而且它们都是不同的)。
  • 重读第一组提示
于 2009-03-15T00:55:14.817 回答
1

你似乎已经问过这个问题两次了。无需重新发布问题,您只需单击问题下方的“编辑”链接并进行更新。我将在此处重新发布我对您的另一个问题的回答,但您确实应该删除其中一个。


如果您有以下矩阵:

A = [1 2 3; 1 3 2];

并且您希望所有的都变成二,而二的变成一,以下将是最简单的方法:

B = A;
B(A == 1) = 2;
B(A == 2) = 1;
于 2009-03-15T18:06:42.887 回答