Matlab 更清晰地解释递归的函数级范围

Matlab 更清晰地解释递归的函数级范围,matlab,recursion,scope,Matlab,Recursion,Scope,这是《神经科学家的Matlab》一书中的一个例子。我不明白g在每次递归之后被分配一个新值的顺序,或者为什么。我也不明白为什么“factorial2”包含在最后一行代码中 这里是文本的链接 基本上,我要求有人重新解释作者关于函数如何工作的解释(红色圆圈),就像他们在向一个5岁的孩子解释概念和过程一样。我对编程一无所知。我本以为我从另一本书中了解了这一点,但现在作者的解释只会引起混乱。非常感谢任何能帮忙的人 递归方法的工作原理是,每次调用该方法时,将一个较大的问题分解为较小的问题。这允许您分解一个

这是《神经科学家的Matlab》一书中的一个例子。我不明白g在每次递归之后被分配一个新值的顺序,或者为什么。我也不明白为什么“factorial2”包含在最后一行代码中

这里是文本的链接


基本上,我要求有人重新解释作者关于函数如何工作的解释(红色圆圈),就像他们在向一个5岁的孩子解释概念和过程一样。我对编程一无所知。我本以为我从另一本书中了解了这一点,但现在作者的解释只会引起混乱。非常感谢任何能帮忙的人

递归方法的工作原理是,每次调用该方法时,将一个较大的问题分解为较小的问题。这允许您分解一个困难的问题;阶乘求和,转化为一系列较小的问题

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

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

2)一般情况:一般情况是我们在达到基本情况之前要称之为的情况。我们再次调用该函数,但这次的值比前一个函数开始时的值小1。这使我们能够朝着基本情况努力

out = num + factorial(num-1);
这句话意味着我们将首先调用小于该函数的1的函数;我们从三开始,下一个调用从两开始,之后的调用从1开始(这会触发我们的基本情况!)

一旦达到基本情况,这些方法就会“递归”。这意味着它们会向后反弹,返回到调用它的函数中,将下面函数中的所有数据都带回来
正是在这一点上,我们的求和实际上发生了。

一旦达到原始函数,我们就有了最终的求和

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

  function [out] = factorial(num)
     %//Base case
     if (num == 1)
        out = 1;
     end
  %//General case
  out = num + factorial(num-1);
浏览函数调用:


这给了我们6的结果

哦,哇,这很有帮助。我冒昧地将您的帖子从Java语法编辑为与之等价的MATLAB语法,因为问题是关于MATLAB的。希望你不介意,谢谢!我不熟悉MATLAB,但我尽了最大努力用我所知道的清楚地解释了它:)你确实很好地解释了递归,当你第一次尝试学习它时,它肯定是一个非常糟糕的概念。我认为如果它是在OP可以理解的代码中,它会更容易被接受。祝你好运谢谢你们两个!埃文,解释是彻底而清楚的。感谢您将代码更改为MATLAB语法rayryeng!
factorial(3); //Initial function call

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