2015-10-05 64 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