2015-02-20 2 views
0

Как написать функцию Фибоначчи в Matlab с использованием петель? Функция должна иметь два входа.Последовательность Fibonacci с использованием Matlab с использованием циклов (итерация)

входы: 1.а номер, чтобы начать последовательности 2.the число слагаемых возврат (должно быть положительное целое число (N))

Выход: вектор 1xN последовательности Фибоначчи.

Условия: Если начальный срок равен 0 или 1, второй член будет равен 1. Для любого другого числа начальный член будет повторен для второго номера.

Благодаря

+0

"номер, чтобы начать последовательность". По определению последовательность Фибоначчи начинается с 'f0 = 0' и' f1 = 1'. Не могли бы вы пояснить, что вы подразумеваете под «числом, чтобы начать последовательность»? – rayryeng

+0

Например, если два входа для функции (0,6), выход должен быть [0 1 1 2 3 5]. Для входов (4,10) выход должен быть [4 4 8 12 20 32 52 84 136 220]. – timrow

+0

Что делать, если два входа были: '(3,6)'? Будет ли выход «[3 4 4 5 6 9]»? – rayryeng

ответ

1

Определение Fibonacci sequence заключается в следующем:

спецификации для вашей функции довольно странно, но тем не менее выполнимо. Сначала вам нужно проверить, равен ли первый член 0 или 1. Если это так, второй член будет 1. Если что-то еще, первые два члена будут точно такими же, как и начальный. Вы требуете кучи if заявлений первых .... так что-то вроде этого:

function out = fibonacci(initial_term, N) 

    if initial_term == 0 || initial_term == 1 
     second_num = 1; 
    else 
     second_num = initial_term; 
    end 

    if N == 1 
     out = initial_term; 
    elseif N == 2 
     out = [initial_term second_num]; 
    else 
     out = zeros(1,N); 
     out(1:2) = [initial_term second_num]; 
     for idx = 3 : N 
      out(idx) = out(idx-1) + out(idx-2); 
     end 
    end 
end 

Первых if заявления проверяет, чтобы увидеть, если первоначальный срок либо 0, либо 1. Если, второй номера будет 1. Если это не так, второе число будет таким же, как и начальный.

Далее мы проверяем, что такое N. Если это 1, просто верните начальный срок. Если это 2, верните массив начального и второго членов. Если это что-то большее, то создайте выходной массив размером N, где первые два элемента инициализируются, как и в случае N = 2, затем мы просто переходим к циклу и используем формулу рекуррентности Фибоначчи для заполнения каждого элемента в выходе из индекса 3 и далее ,

Вы также можете написать петлю for как петлю while. Помните, что петля while сохраняет итерирование доlogical Условие, что проверка петли while становится false. Таким образом, вы могли бы сделать:

out = zeros(1,N); 
out(1:2) = [initial_term second_num]; 
idx = 3; 
while idx <= N 
    out(idx) = out(idx-1) + out(idx-2); 
    idx = idx + 1; 
end 

Пример вызовов

>> out = fibonacci(3, 6) 

out = 

    3  3  6  9 15 24 

>> out = fibonacci(0, 6) 

out = 

    0  1  1  2  3  5 

>> out = fibonacci(4, 10) 

out = 

    4  4  8 12 20 32 52 84 136 220 
+0

Спасибо, сэр. Кстати, в какой книге вы бы порекомендовали новичку без опыта программирования, чтобы узнать Matlab? – timrow

+0

Не могли бы вы объяснить часть цикла? Нужно ли инициализировать все циклы? И как вы попадаете в раздел «Математика» цикла?out = нули (1, N); out (1: 2) = [initial_term second_num]; для idx = 3: N out (idx) = out (idx-1) + out (idx-2); end – timrow

+0

Это не домашнее задание. Я просто обучаюсь программированию в Matlab и начинаю с книги, которую я читаю в главе за главой, и пытаюсь ответить на вопросы, чтобы помочь мне понять. – timrow

Смежные вопросы