|
Вопрос # 5 493/ вопрос открыт / |
|
Здравствуйте, уважаемые эксперты!
Помогите написать прогу для вычисления чисел фибоначчи рекурсивным способом
 |
Вопрос задал: Aristotel (статус: Посетитель)
Вопрос отправлен: 11 июля 2011, 12:43
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Aristotel!
function fib(n:integer):integer;
begin
if (n = 1) or (n = 2) then result := 1
else result := fib(n - 1) + fib(n-2);
end;
на форму ставим edit1 для ввода, и label для вывода результата. И конечно кнопку, по которой будет производится расчет. Обработчик клика будет такой
Label1.caption := Intttostr(fib(strtoint(edit1.text)));
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 11 июля 2011, 12:48
Оценка за ответ: 5
Комментарий к оценке: А вот этот кусок писать где?
|
Мини-форум вопроса
Всего сообщений: 31; последнее сообщение — 11 июля 2011, 15:36; участников в обсуждении: 4.
Страницы: [1] [2] [Следующая »]
11 июля 2011, 12:49: Вопрос перемещён из тематического раздела Delphi » Работа с компонентами и библиотеками в раздел Delphi » Общие вопросы по программированию модератором Вадим К
|
Вадим К (статус: Академик), 11 июля 2011, 12:51 [#1]:
какой именно?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 12:53 [#2]:
Который начинается со слова function?
|
|
Вадим К (статус: Академик), 11 июля 2011, 12:54 [#3]:
например сразу после слова implementation (в следующей строке, естественно).
Галочка "подтверждения прочтения" - вселенское зло.
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 12:55 [#4]:
Понятно сейчас попробую-если что-напишу
Так что пока что не уходи отсюда плиз.
|
|
Gooddy (статус: 3-ий класс), 11 июля 2011, 12:56 [#5]:
Мне так кажется что он весь код после end. вставит xD
Вместе с текстом ответа xD
Чисти код! Чисти код! Чисти код!
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 13:00 [#6]:
Да ладно я не такой тупой
Кстати всё заработало спасибо большое
Но у меня вопрос-до какого числа такая программа будет считать?
|
|
Gooddy (статус: 3-ий класс), 11 июля 2011, 13:02 [#7]:
Aristotel: ну тогда ладно. Работать будет до 50-60 числа фибонначи.
Но уже на 30-ом будет очень долго вычислять результат.
50-ое число фибонначи таким методом будет считаться наверное час.
Чисти код! Чисти код! Чисти код!
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 13:04 [#8]:
А можно как то сделать чтобы больше чисел вычислял?
|
|
Gooddy (статус: 3-ий класс), 11 июля 2011, 13:08 [#9]:
Можно. Но скорость вычисления всё равно будет низкой. Сейчас в тип integer может поместиться возможно даже 100-ое число, но вычислить его таким методом в нормальные сроки не получится.
Чисти код! Чисти код! Чисти код!
|
|
Gooddy (статус: 3-ий класс), 11 июля 2011, 13:09 [#10]:
Есть конечно метод итерации, с помощью которого числа фибоначчи можно вычислить оочень быстро.
Но в условии написано рекурсивно.
Чисти код! Чисти код! Чисти код!
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 13:13 [#11]:
Да только рекурсией
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 13:14 [#12]:
((У меня на число 50-вычислил -298632863
|
|
Gooddy (статус: 3-ий класс), 11 июля 2011, 13:16 [#13]:
Хм. Тогда замени тип integer на int64 во всей программе.
Чисти код! Чисти код! Чисти код!
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 13:16 [#14]:
на 47 начинает выдавать отрицательные числа
|
|
Gooddy (статус: 3-ий класс), 11 июля 2011, 13:17 [#15]:
И вот эту строчку на
Label1.caption := Int64ttostr(fib(strtoint64(edit1.text)));
Чисти код! Чисти код! Чисти код!
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 13:19 [#16]:
Во спс-работает нормально
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 13:21 [#17]:
А вот когда изменяю вот эту строчку-пишет
Undeclared identifier: 'Int64tostr'
|
|
Gooddy (статус: 3-ий класс), 11 июля 2011, 13:21 [#18]:
Это для саморазвития или задание? Для задания как то поздно.
Чисти код! Чисти код! Чисти код!
|
|
Aristotel (статус: Посетитель), 11 июля 2011, 13:23 [#19]:
Не ну я сделал как ты сказал-вот и говорю что получилось
|
|
Gooddy (статус: 3-ий класс), 11 июля 2011, 13:23 [#20]:
Aristotel: по поводу строчки
Label1.caption := Intttostr(fib(strtoint(edit1.text)));
Менять как оказывается не надо, у обоих функций есть перегруженные варианты.
Так это задание или для саморазвития? Для саморазвития могу написать пример итерационного вычисления сравнишь скорость.
Чисти код! Чисти код! Чисти код!
|
Страницы: [1] [2] [Следующая »]
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|