function fnum = fib(n)
if (n == 1) || (n == 2)
fnum = 1;
else
fnum = fib(n-1) + fib(n-2);
end
您能解释一下给定输入的每个步骤如何输出。例如输入7给我13,5给我5,但我无法跟踪如何。我非常感谢你的回复。
答案 0 :(得分:2)
递归基本上意味着函数调用自身。
如果我们按照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)
。见前一段。
这是一种非常有用的编程方式,因为它是一个非常简单的函数来计算可能更复杂的东西。最重要的是你确保任何递归函数都有强烈的停止标准,否则它可以永远存在!
答案 1 :(得分:1)
你知道Fibonacci系列是如何定义的吗?该函数以递归方式实现。
更长的答案
Fibonacci系列定义为
n(1) = 1
n(2) = 1
n(k+1) = n(k) + n(k-1)
所以当你把5作为参数时,扩展变为
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
更简单的包络方法是从第一个索引开始并添加最后两个术语以到达下一个。
1,1,2 <&lt; - (1 + 1),3&lt; - (2 + 1),5&lt; - (3 + 2),......
答案 2 :(得分:1)
Fibonnacci系列定义为f(1) = 1, f(2) = 1 and for all n > 2, f(n) = f(n-1) + f(n-2)
因此,当您致电fib(1)
时,它会为1
返回fib(2)
个相同内容。但是当您致电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
。当等于1或2时,它返回1.