如何在递归函数中保存多个输出

Posted

技术标签:

【中文标题】如何在递归函数中保存多个输出【英文标题】:How to save multiple output in recursive function 【发布时间】:2017-04-03 06:06:20 【问题描述】:

给定一个矩阵 A,我必须对 A 的所有可能的条目进行组合,使得每一行只选择一个数字。我制作了一个成功运行的递归程序。但我无法保存输出向量。因此,例如在下面的矩阵 A 中,将有 27 个这样的组合,我想将它们保存在 3x27 阶的矩阵中。

A = [3 4 0; 2 3 7; 45 7 0]
n = 1; 
X = zeros(3,1); 
comb(n, X, A); 

%function to calculate all combinations. 
function X = comb(n, X, A)
   if (n > 3)
      X
      return 
   end 
   for i = 1:3 
      X(n) = A(n, i); 
      comb(n + 1, X, A); 
   end
end

【问题讨论】:

你能告诉我们(重要的部分)你的代码吗?无法保存是什么意思? n=1; X=零(3,1);梳(n,X,A); %function 计算所有组合。 function X =comb(n,X, A) if (n>3) X return end for i=1:3 X(n)= A(n,i);梳(n+1,X,A);结束结束 我的代码存在一些格式问题。但是如果你只是将它复制粘贴到matlab中它会正常运行。 Soltius,现在显示代码。我想保存每个输出向量 X。在矩阵 A 的这种特殊情况下,将有 27 个输出向量。然后我想保存在一个 3x27 的矩阵中。 【参考方案1】:

这是一种可能的方法:

要使您的变量在所有上下文中可见,您需要声明一个全局变量:

global OUT;
%rest of the code

然后,您只需在主文件中将OUT 定义为空变量:

OUT = [];

在函数脚本中,只要满足 if 语句,您就会指示将 X 附加到 OUT

if (n > 3)
  OUT = [OUT,X];
  return 
end 

生成的代码如下:

global OUT;
OUT = [];
A = [3 4 0; 2 3 7; 45 7 0];
n = 1; 
X = zeros(3,1); 
comb_SO(n, X, A); 
OUT
function X = comb_SO(n, X, A)
global OUT;
   if (n > 3)
      OUT = [OUT,X];
      return 
   end 
   for i = 1:3 
      X(n) = A(n, i); 
      comb_SO(n + 1, X, A); 
   end
end

寻找的结果在OUT变量中:

 3   3   3   3   3   3   3   3   3   4   4   4   4   4   4   4   4   4   0   0   0   0   0   0   0   0   0
 2   2   2   3   3   3   7   7   7   2   2   2   3   3   3   7   7   7   2   2   2   3   3   3   7   7   7
45   7   0  45   7   0  45   7   0  45   7   0  45   7   0  45   7   0  45   7   0  45   7   0  45   7   0

但是,MATLAB 的功能可以让您在没有任何递归的情况下实现您的目标:

A = [3 4 0; 2 3 7; 45 7 0];
OUT = combvec(A(1,:),A(2,:),A(3,:))

或者,即使没有combvec,对于任意大小的 A:

A = reshape(1:20,4,5);
[n,m] = size(A);
Q = repmat(1:m,n,1);
B = cell(n,1);
[B:] = ndgrid(Q:)
tmp = [];
OUT = [];
for k = 1:n
tmp = [tmp,Bk(:)];
OUT = [OUT;A(k,tmp(:,k))];
end

希望对你有帮助

【讨论】:

以上是关于如何在递归函数中保存多个输出的主要内容,如果未能解决你的问题,请参考以下文章

递归函数如何在数组中保存消息?

如何将递归函数的返回值保存在变量 JavaScript 中

一次快速将多个图像保存到文件系统,高CPU

如何在 Python 中存储递归函数的输出?

具有返回值的递归

函数的定义与调用递归