Matlab:如何在没有循环或内置函数的情况下递归地获取斐波那契序列中的第 N 个元素

Posted

技术标签:

【中文标题】Matlab:如何在没有循环或内置函数的情况下递归地获取斐波那契序列中的第 N 个元素【英文标题】:Matlab: How to get the Nth element in fibonacci sequence recursively without loops or inbuilt functions 【发布时间】:2020-07-24 21:20:35 【问题描述】:

我正在尝试编写一个递归代码,它接受输入 n 并输出斐波那契数列的第 n 项,而不使用任何循环或任何 MATLABS 内置函数。

例如:

fibo(6)

ans = 8

我在递归编写代码时遇到问题,非常感谢一些帮助。

我写了一个循环:

function f = fib1(n)
    if n <= 1
        f = 1;
    else
        f = fib1(n-1) + fib1(n-2);
    end
end

【问题讨论】:

【参考方案1】:

如果您想为fib1(6) 获得8,这意味着您需要从n=1 开始您的斐波那契数列。但是,您的代码表明您从n=0 开始。在这种情况下,您应该在 if-else 语句中使用 n &lt;=2,即

function f = fib1(n)
    if n <= 2
        f = 1;
    else
        f = fib1(n-1) + fib1(n-2);
    end
end

这样

>> fib1(6)
ans =  8

如果你不想使用任何递归,你可以试试下面的代码

function f = fib2(n)
  f = (((1+sqrt(5))/2)^n - ((1-sqrt(5))/2)^n)/sqrt(5);
end

给了

>> fib2(6)
ans =  8

【讨论】:

以上是关于Matlab:如何在没有循环或内置函数的情况下递归地获取斐波那契序列中的第 N 个元素的主要内容,如果未能解决你的问题,请参考以下文章

如何在保证仿真精度的情况下提高仿真速度

递归与内置函数

如何将函数应用于 MATLAB 中矩阵的每一行/列?

如何在不使用递归或`/`运算符的情况下进行除法?

如何在不调用索引函数或任何内置函数的情况下获取列表中的索引?

js sleep函数怎么没有反应?