Matlab 这个递归是如何工作的?你能解释一下他们是如何得到输出的吗?

Matlab 这个递归是如何工作的?你能解释一下他们是如何得到输出的吗?,matlab,recursion,Matlab,Recursion,您能否解释一下,对于给定的输入,每个步骤是如何输出的。例如,输入7给我13,5给我5,但我无法跟踪如何。非常感谢您的回复。您知道斐波那契级数是如何定义的吗?此函数递归地实现该功能 更长的答案 斐波那契级数定义为 function fnum = fib(n) if (n == 1) || (n == 2) fnum = 1; else fnum = fib(n-1) + fib(n-2); end 所以当你把5作为参数,展开式就变成了 n(1) = 1 n(2) = 1 n(k+

您能否解释一下,对于给定的输入,每个步骤是如何输出的。例如,输入7给我13,5给我5,但我无法跟踪如何。非常感谢您的回复。

您知道斐波那契级数是如何定义的吗?此函数递归地实现该功能

更长的答案

斐波那契级数定义为

function fnum = fib(n)
if (n == 1) || (n == 2)
    fnum = 1;
else
    fnum = fib(n-1) + fib(n-2);
end
所以当你把5作为参数,展开式就变成了

n(1) = 1
n(2) = 1
n(k+1) = n(k) + n(k-1)
一个简单得多的封底法是从第一个索引开始,然后加上最后两个项,直到下一个索引


1,1,2Fibonnacci系列被定义为
f(1)=1,f(2)=1,对于所有n>2,f(n)=f(n-1)+f(n-2)

因此,当您调用
fib(1)
时,它返回与
fib(2)
相同的
1
。但是当您调用
fib(3)
时,它返回
fib(3-1)+fib(3-2)
,即
fib(2)+fib(1)=2
。然后当你调用
fib(4)
时,它返回
fib(3)+fib(2)=(fib(2)+fib(1))+fib(1)=3
。递归地,fibonnaci级数等于
1,1,3,5,8,13,21,


对于n不同于1或2的代码,它递归调用函数
fib
。当is等于1或2时,它返回1。

递归基本上意味着函数调用自身

如果我们按照您的函数调用
fib(3)
,您将看到它所做的是调用
fib(2)+fib(1)
。这些值已定义,且为1,因此它将返回2

如果用
fib(4)
调用它,它将去计算
fib(3)+fib(2)
。您已经知道了
fib(3)
的作用(参见上一段),并且我们已经提到
fib(2)
返回
1

如果你用
fib(5)
调用它,它会去计算
fib(4)+fib(3)
。见上一段


这是一种非常有用的编程方法,因为它是一个非常简单的函数,可以用来计算更复杂的东西。最重要的是要确保任何递归函数都有很强的停止条件,否则它可能永远停止

好吧,假设我输入7,否则会产生fnum=(7-1)+(7-2),对吗?如果你不知道,你能解释一下步骤吗mind@JaZZyCooL更新为n(5)参见尝试使用MATLAB调试器来了解程序的工作原理。还应该提到,与其他方法相比,递归速度较慢,因此当速度很重要时,值得寻找其他方法。的确,评论不错;)不一定,智能编写的代码+智能编译器通常意味着尾部调用优化。
n(4+1) = n(4)+n(3)
       = n(3)+n(2)+n(2)+n(1)
       = n(2)+n(1)+1+1+1
       = 1+1+1+1+1
       = 5