在matlab中找到斐波那契序列的第n个项

时间:2018-10-28 17:04:36

标签: matlab recursion user-input fibonacci

我试图编写一个程序,该程序使用用户的输入(n)并输出斐波那契数列的第n个项,而不使用MATLAB的任何内置函数。目前,我已经编写了以下函数,但是,我希望对此代码进行一些更改,以便n=input("Enter value of n")不确定如何执行此操作?我需要声明一个名为fib1的空数组吗?

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

5 个答案:

答案 0 :(得分:3)

斐波那契数列由一个差分方程定义,该方程等效于递归离散时间filter

>> n = 10;
>> result = [1 filter([1 1], [1 -1 -1], [1 zeros(1,n-2)])]
result =
     1     1     2     3     5     8    13    21    34    55

答案 1 :(得分:2)

您可以通过首先查询输入参数的实际数量(nargin)并分别处理两种情况来轻松修改函数:

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

Try it online!

答案 2 :(得分:2)

更好的方法是将函数放在单独的nd4j文件中,然后从另一个文件中调用它,如下所示:

fib.m

另外,您可以像下面这样改善斐波那契代码的性能:

n = input("Enter value of n")  
result = fib(n)

答案 3 :(得分:2)

只是想我会在这里添加...

可以在不使用递归的情况下找到斐波那契数列的第n个项。 (存在一个封闭形式的解决方案。)我不一定希望这个答案会被接受,而只是想表明有可能在不使用递归的情况下找到斐波那契数列的第n个项。

尝试此功能。我很久以前做了这个。如果输入是整数,我还添加了一些代码将输出舍入到最接近的整数。我发现这是必要的,因为有时由于计算机对无理数进行四舍五入,因此四舍五入会导致闭式解决方案不产生整数。

function x = fib(n)
%FIB Fibonacci sequence.
%   X = FIB(N) returns the Nth term in the Fibonacci sequence, which is
%   defined in the following way:
%
%   FIB(N+2) = FIB(N+1) + FIB(N) , FIB(0) = 0 , FIB(1) = 1
%
%   The closed form solution to the Fibonacci sequence is:
%
%                            N                   N
%             / 1 + SQRT(5) \     / 1 - SQRT(5) \
%             | ----------- |  -  | ----------- |
%   FIB(N) =  \      2      /     \      2      /
%             ------------------------------------
%                           SQRT(5)
%
%   Although this formula is only physically meaningful for N as an
%   integer, N can be any real or complex number.

r = sqrt(5);

x = (((1+r)/2).^n-((1-r)/2).^n)/r;

for l = numel(n)
    if isequal(mod(n(l),1),0)
        x(l) = round(x(l));
    end
end

end

答案 4 :(得分:1)

您可以定义一个采用n=input("Enter value of n");的函数。然后,让该函数内部的斐波那契数列f = fib2(n);的第n个项计算。

function f = fib1()
    n = input('Enter value of n: '); 
    f = fib2(n);
    function f = fib2(n)
        if n <= 1
            f = 1;
        else
            f = fib2(n-1) + fib2(n-2);
        end
    end
end