Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 493

/ вопрос открыт /

Здравствуйте, уважаемые эксперты!
Помогите написать прогу для вычисления чисел фибоначчи рекурсивным способом

Aristotel Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: 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

Aristotel (статус: Посетитель), 11 июля 2011, 12:53 [#2]:

Который начинается со слова function?
Вадим К

Вадим К (статус: Академик), 11 июля 2011, 12:54 [#3]:

например сразу после слова implementation (в следующей строке, естественно).
Галочка "подтверждения прочтения" - вселенское зло.
Aristotel

Aristotel (статус: Посетитель), 11 июля 2011, 12:55 [#4]:

Понятно сейчас попробую-если что-напишу
Так что пока что не уходи отсюда плиз.
Gooddy

Gooddy (статус: 3-ий класс), 11 июля 2011, 12:56 [#5]:

Мне так кажется что он весь код после end. вставит xD

Вместе с текстом ответа xD
Чисти код! Чисти код! Чисти код!
Aristotel

Aristotel (статус: Посетитель), 11 июля 2011, 13:00 [#6]:

Да ладно я не такой тупой
Кстати всё заработало спасибо большое
Но у меня вопрос-до какого числа такая программа будет считать?
Gooddy

Gooddy (статус: 3-ий класс), 11 июля 2011, 13:02 [#7]:

Aristotel: ну тогда ладно. Работать будет до 50-60 числа фибонначи.
Но уже на 30-ом будет очень долго вычислять результат.
50-ое число фибонначи таким методом будет считаться наверное час.
Чисти код! Чисти код! Чисти код!
Aristotel

Aristotel (статус: Посетитель), 11 июля 2011, 13:04 [#8]:

А можно как то сделать чтобы больше чисел вычислял?
Gooddy

Gooddy (статус: 3-ий класс), 11 июля 2011, 13:08 [#9]:

Можно. Но скорость вычисления всё равно будет низкой. Сейчас в тип integer может поместиться возможно даже 100-ое число, но вычислить его таким методом в нормальные сроки не получится.
Чисти код! Чисти код! Чисти код!
Gooddy

Gooddy (статус: 3-ий класс), 11 июля 2011, 13:09 [#10]:

Есть конечно метод итерации, с помощью которого числа фибоначчи можно вычислить оочень быстро.
Но в условии написано рекурсивно.
Чисти код! Чисти код! Чисти код!
Aristotel

Aristotel (статус: Посетитель), 11 июля 2011, 13:13 [#11]:

Да только рекурсией
Aristotel

Aristotel (статус: Посетитель), 11 июля 2011, 13:14 [#12]:

((У меня на число 50-вычислил -298632863
Gooddy

Gooddy (статус: 3-ий класс), 11 июля 2011, 13:16 [#13]:

Хм. Тогда замени тип integer на int64 во всей программе.
Чисти код! Чисти код! Чисти код!
Aristotel

Aristotel (статус: Посетитель), 11 июля 2011, 13:16 [#14]:

на 47 начинает выдавать отрицательные числа
Gooddy

Gooddy (статус: 3-ий класс), 11 июля 2011, 13:17 [#15]:

И вот эту строчку на

Label1.caption := Int64ttostr(fib(strtoint64(edit1.text)));
Чисти код! Чисти код! Чисти код!
Aristotel

Aristotel (статус: Посетитель), 11 июля 2011, 13:19 [#16]:

Во спс-работает нормально
Aristotel

Aristotel (статус: Посетитель), 11 июля 2011, 13:21 [#17]:

А вот когда изменяю вот эту строчку-пишет
Undeclared identifier: 'Int64tostr'
Gooddy

Gooddy (статус: 3-ий класс), 11 июля 2011, 13:21 [#18]:

Это для саморазвития или задание? Для задания как то поздно.
Чисти код! Чисти код! Чисти код!
Aristotel

Aristotel (статус: Посетитель), 11 июля 2011, 13:23 [#19]:

Не ну я сделал как ты сказал-вот и говорю что получилось
Gooddy

Gooddy (статус: 3-ий класс), 11 июля 2011, 13:23 [#20]:

Aristotel: по поводу строчки
Label1.caption := Intttostr(fib(strtoint(edit1.text)));

Менять как оказывается не надо, у обоих функций есть перегруженные варианты.

Так это задание или для саморазвития? Для саморазвития могу написать пример итерационного вычисления сравнишь скорость.
Чисти код! Чисти код! Чисти код!

Страницы: [1] [2] [Следующая »]

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:43
Выполнено за 0.03 сек.