我有一个for
循环递归函数,我想访问之前的n
变量。我该怎么做呢?
function Signal(arr,val)
recu=length([arr 1]);
if recu==1
return
end
for n=1:1:3-val
n
%%// now I want to save all my Previous n variables to pass to the next for loop%
val=n;
Signal(arr(1:1:end-1),val)
end
end
答案 0 :(得分:0)
当问题可以通过将其分成相同问题的较小实例来解决时,递归可能很有用。例如,斐波那契序列,其中第n个数是前两个数的总和, fib(n)= fib(n-1)+ fib(n-2)。这意味着您可以通过调用前两个数字上的相同函数来计算第n个数字。
function y = fib(n)
if (n==0 || n==1)
y=1;
else
y = fib(n-1)+fib(n-2);
end
end
请注意,该函数完全不知道前一次递归中发生的事情。另请注意,Matlab中的递归函数需要返回值,因为Matlab始终是值传递。这个特定的例子当然可以通过迭代方法更有效地解决,但由于其明显的递归连接,它通常用于教育目的。另一个例子是quicksort(有用,查找它!),它以有效的方式对子数组进行排序。
您的问题需要先前调用的信息,这不适合递归。如果你真的需要像这样解决它,你必须传递你需要的所有信息作为参数。没有其他方法可以提供信息功能(虽然可以使用全局变量,但它在许多方面令人不愉快,不推荐)。如果您觉得参数太多,可以将它们作为结构传递给它们。一个好的结构名称可以使函数看起来更舒服,更容易阅读。