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