Matlab 这个递归是如何工作的?你能解释一下他们是如何得到输出的吗?
您能否解释一下,对于给定的输入,每个步骤是如何输出的。例如,输入7给我13,5给我5,但我无法跟踪如何。非常感谢您的回复。您知道斐波那契级数是如何定义的吗?此函数递归地实现该功能 更长的答案 斐波那契级数定义为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+
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