Помогите с программирование плиз)


гильдия Бойцы (Мастер)[3345] гильдия Охотники Илдиора (Элита)[63740] гильдия Портные (Грандмастер)[58476] Flash999 Информация
Назад к темам раздела.
2010-03-23 17:46:46 гильдия Бойцы (Мастер)[3345] гильдия Охотники Илдиора (Элита)[63740] гильдия Портные (Грандмастер)[58476] Flash999 Информация
Задача:
Найти количество сложений для вычисления n-го числа Фибоначчи рекурсивным и обычным алгоритмом. Результаты выдать в виде таблицы.

Ну с самим числом фибоначчи всё понятно, а вот что такое Рекурсивный и обычный алгоритм, в чем разница??
Подскажите, пожалуйста, кто разбирается.
 
2010-03-23 18:22:19 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
Гугл тебе в помощь. Алгоритмов море. И про рекурсию там куда как более подробно описано, с примерами. Сам так первые алгоритмы писал
 
2010-03-23 18:26:23 гильдия Бойцы (Мастер)[3345] гильдия Охотники Илдиора (Элита)[63740] гильдия Портные (Грандмастер)[58476] Flash999 Информация
yashchar
уже искала, то что прочитала - почти ничего не поняла...
 
2010-03-23 20:55:32 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
Flash999
Водишь запрос типа рекурсивный алгоритм чисел Фибоначчи и наслаждаешься информацией. По крайней мере эффективность рекурсивного по сравнению в обычным там точно будет
 
2010-03-23 21:09:05 гильдия Бойцы (Мастер)[3345] гильдия Охотники Илдиора (Элита)[63740] гильдия Портные (Грандмастер)[58476] Flash999 Информация
yashchar
я не сказала, что я не нашла информацию, я сказала, что я ее не поняла.
а вернее примеры кода (само сравнение).
 
2010-03-23 21:21:18 гильдия Столичные Шахтеры (Грандмастер)[20537] Фтвкун Информация
Flash999
ну вот тебе код из первой же ссылки=)
Function Fibo(n)
If n = 1 Or n = 2
Return 1
End If
Return Fibo(n - 1) + Fibo(n - 2)
End Function

function - это функция
Fibo - имя функции
если n=1 или 2 то возвращаем 1 так как первый и 2ой элемент фибаначи равны 1,
в остальных случаях возвращается Fibo(n - 1) + Fibo(n - 2) - вызывается 2 функции Fibo, но уже не для числа n, а для чисел n-1 и n-2 , которая опять проверяет, является ли число n-1 либо n-2 равным 1 или два, иначе снова вызывается функция Fibo для (n-1)-1, (n-1)-2, (n-2)-1, (n-2)-2 итд
 
2010-03-23 21:27:59 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
а вот нерекурсивный алгоритм:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream.h>

void main(void)
{ clrscr();
int m;
int i,i1=1,i2=1;
cout<<"M=";
cin>>m;
while(i1<m)
{ i=i1+i2;
i1=i2;
i2=i;
cout<<i<<"n";
}
cout<<i<<">"<<m;
getch();
}

 
2010-03-23 21:30:01 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
В рекурсии сначала спускаются от некого известного n до конча, т.е. когда n==1, и только потом начинаются вычисления сумм, учитывая уже полученный ранее результат
 
2010-03-23 21:30:29 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
yashchar писал(а):
до конча

до конца, пальцы мне вырвать
 
2010-03-23 21:34:05 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
А если НЕ(!) рекурсивный алгоритм взять такой, то еще более интересно, чем рекурсия:

const
max = 25;
var
i : integer;
F : array [0..max] of integer;

procedure fibonacci;
begin
F[0] := 1;
F[1] := 1;
for i := 2 to max do
F[i] := F[i-1]+F[i-2];
end;
 
2010-03-23 21:42:34 гильдия Столичные Шахтеры (Грандмастер)[20537] Фтвкун Информация
yashchar
последний метод понравился)
 
2010-03-23 21:43:38 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
Фтвкун
сам в восторге, массив сделать динамическим, max с клавиатуры и нафих ту рекурсию
 
2010-03-23 21:46:44 гильдия Бойцы (Мастер)[3345] гильдия Охотники Илдиора (Элита)[63740] гильдия Портные (Грандмастер)[58476] Flash999 Информация
yashchar писал(а):
В рекурсии сначала спускаются от некого известного n до конча, т.е. когда n==1, и только потом начинаются вычисления сумм, учитывая уже полученный ранее результат

так я так и делала, значит вопрос заключался не в том, что такое рекурсия, а что такое обычный алгоритм)

но теперь вроде понятно)

yashchar
Фтвкун
спасибо)
 
2010-03-23 21:49:54 гильдия Столичные Шахтеры (Элита)[131682] гильдия Алхимики (Элита)[194744] MrHide Информация
yashchar писал(а):
массив сделать динамическим, max с клавиатуры и нафих ту рекурсию

только надо еще под максимум выделить очень длинный беззнаковый инт
 
2010-03-23 21:52:45 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
MrHide
int 64 в плюсах, а на паскале longint, не больше
 
2010-03-23 22:55:21 гильдия Столичные Шахтеры (Элита)[131682] гильдия Алхимики (Элита)[194744] MrHide Информация
yashchar
а, черт, я не уловил, что паскаль, в код не вчитывался, думал Си
 
2010-03-23 23:25:31 гильдия Столичные Шахтеры (Элита)[64262] yashchar Информация
MrHide
Да оно и без разницы. ))) В данном, так сказать, случае
 
2010-03-24 09:07:56 гильдия Бойцы (Мастер)[3345] гильдия Охотники Илдиора (Элита)[63740] гильдия Портные (Грандмастер)[58476] Flash999 Информация
закрыто