在matlab中求fibonacci序列的第n项

在matlab中求fibonacci序列的第n项,matlab,recursion,user-input,fibonacci,Matlab,Recursion,User Input,Fibonacci,我试图编写一个程序,不使用任何MATLAB内置函数,获取用户的输入n并输出斐波那契序列的第n项。我目前已经编写了下面的函数,但是,我希望稍微修改一下代码,使n=inpunter值为n,但是我不确定如何进行?我需要声明一个名为fib1的空数组吗 function f = fib1(n) if n <= 1 f = 1; else f = fib1(n-1) + fib1(n-2); end end 通过首先查询输入参数的实际数量,并分

我试图编写一个程序,不使用任何MATLAB内置函数,获取用户的输入n并输出斐波那契序列的第n项。我目前已经编写了下面的函数,但是,我希望稍微修改一下代码,使n=inpunter值为n,但是我不确定如何进行?我需要声明一个名为fib1的空数组吗

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

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

函数f=fib1n
如果nargin您可以定义一个函数,该函数的n=inpunter值为n;。然后计算斐波那契序列的第n项f=fib2n;在该功能内部

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

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

n = input("Enter value of n")  
result = fib(n)
此外,您还可以通过以下方式提高斐波那契代码的性能:

function f = fib(n)
res = ones(1, n + 1);
for i = 3:(n + 1)
     res(i) = res(i - 1) + res(i - 2)
end
f = res(n + 1)

我只是想在这里加上这个

不使用递归就可以找到斐波那契序列的第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

斐波那契序列由一个差分方程定义,该差分方程相当于一个递归离散时间序列:


看到黄金分割率出现令人满意,所以:@jodag-Ha,是的,我想在编程环境中出现黄金分割率是有点罕见的。只有在我能想象的情况下,你们才会看到它是斐波那契序列,或者可能是一个天然的花瓣图案。
>> 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