更清楚地解释递归的函数级别范围

时间:2015-02-03 00:01:47

标签: matlab recursion scope

这是神经科学家的书#Matlab中的一个例子。我不理解每次递归后g被赋予新值的顺序或原因。我也不明白为什么" factorial2"包含在最后一行代码中。

这是指向文本的链接

基本上,我要求某人重新说明作者如何运作的解释(用红色圈出),就像他们向5岁的孩子解释概念和过程一样。我对编程很陌生。我以为我理解这是如何通过阅读另一本书来解决的,但现在这位作者的解释只会导致混乱。非常感谢任何可以帮助的人!!

1 个答案:

答案 0 :(得分:0)

递归方法的工作方法是,每次调用方法时,将较大的问题分解为较小的问题这可以让您打破困难的问题;一个因子总和,成为一系列较小的问题。

每个递归函数有两部分:
1)基本情况:我们关心评估的最低值。通常这会变为零或一。

if (num == 1)
  out = 1;
end


2)一般情况:一般情况是在我们达到基本情况之前我们要打电话的情况。我们再次调用该函数,但这次比前一个函数少了1个。这使我们能够走向基本案例。

out = num + factorial(num-1);

这句话意味着我们将首先调用该函数,其中的函数比函数少1;我们从三开始,下一个调用以两个开始,之后的调用以1开始(这触发了我们的基本情况!)

一旦达到基本情况,方法“recurse-out”。这意味着它们会向后反弹,返回到调用它的函数中,从下面的函数中获取所有数据!
此时我们的求和实际上已经发生了。

一旦达到原始功能,我们就会得到最终的总和。

例如,假设您想要前3个整数的总和。 第一个递归调用传递给数字3。

  function [out] = factorial(num)
     %//Base case
     if (num == 1)
        out = 1;
     end
  %//General case
  out = num + factorial(num-1);

遍历函数调用:

factorial(3); //Initial function call

//Becomes..
factorial(1) + factorial(2) + factorial(3) = returned value

这给了我们6的结果!