2015-10-05 47 views
0

我现在面临的问题与这个简单的斐波那契数生成程序:停止的输出为周期在MATLAB

function f = fibonr(n) 
f(1) = 1; 
f(2) = 1; 
    for i = 3:n 
    f(i) = f(i-1) + f(i-2); 
    end 

end 

如果我想只显示序列的第n个数字,什么样的调整我应该做什么?

+2

一旦完成for循环(n次迭代之后)第n号将是最后一个存储在'f'对吗?然后你可以在循环的'end'语句后面显示'f(end)'。这是你的意思吗? –

+0

我照你所说的做了,但在这种情况下,我得到了两个输出:第一个存储了最后一个数字,并且程序的整个向量的回答是 – james42

回答

2
function f = fibonr(n) 
f = zeros(n,1); %//initialise the output array 
f(1,1) = 1; 
f(2,1) = 1; 
for ii = 3:n 
    f(ii,1) = f(ii-1,1) + f(ii-2,1); 
end 
%//create a string with text and variables 
str = sprintf('The %d th number in the Fibonacci sequence is %d',n,f(ii,1)); 
disp(str) %//display your output. 
end 

首先:don't use i as a variable。其次,我转向使用列向量,因为MATLAB处理它们的速度更快,并且我初始化了阵列,速度更快(因此闪烁的橙色摆动线位于您的f(i)=线下方)。

调用你的函数:

output = fibonr(10); 
The 10 th number in the Fibonacci sequence is 55 

如果使用例如n=20并且仍然希望第10个参数只需拨打output(10)

+0

你可以向我解释一下语句零(n ,1)是否意味着? – james42

+0

这并不能解决我的问题。我尝试过使用你的代码,但是我得到的是第n个数字的无限列表 – james42

+0

只需使用所提供的函数以及在命令窗口中“调用你的函数”下面的代码即可。 – Adriaan

0

如果您想立即指定输出,您可以使用nargin。如果您拨打fibonr(n),此代码将为您提供所有序列,或者您可以指定一个向量来获取所述位置的fibonacy数字。如果你有兴趣在这两个,你指定的输出及所有的号码,你可以调用与功能: [output, fibnumbers] = fibonr(n,v);

function [output,f] = fibonr(n,v) 
f(1) = 1; 
f(2) = 1; 
    for i = 3:n 
    f(i) = f(i-1) + f(i-2); 
    end 

if nargin() > 1 
    output = f(v); 
else 
    output = f; 
end