如何在for循环递归函数中传递我之前的n个变量?

时间:2015-10-12 00:20:19

标签: matlab recursion

我有一个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

1 个答案:

答案 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(有用,查找它!),它以有效的方式对子数组进行排序。

您的问题需要先前调用的信息,这不适合递归。如果你真的需要像这样解决它,你必须传递你需要的所有信息作为参数。没有其他方法可以提供信息功能(虽然可以使用全局变量,但它在许多方面令人不愉快,不推荐)。如果您觉得参数太多,可以将它们作为结构传递给它们。一个好的结构名称可以使函数看起来更舒服,更容易阅读。