Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2014, 16:56   #1
AZelensky
Пользователь
 
Регистрация: 15.11.2013
Сообщений: 52
По умолчанию Рекурсия

Доброго времени суток, уважаемые. У меня возник вопрос при решении одной задачки. Задача состоит в следующем: нужно написать функцию целочисленного деления, не используя стандартные функции, а используя рекурсию.

Вот что у меня вышло:
Код:
// Деление нацело числа Number на Number_ 
function Division(Number, Number_: integer): integer; 
var 
  Res: byte;  // Результат 
begin 
  Number:= Number - Number_; 
  Inc(Res); 
  if Number >= Number_ then 
     Division(Number, Number_); 
  Result:= Res; 
end;
Потом мне предложили так:
Код:
function Division(Number, Number_: integer): integer;   
var   
  Res: integer;  // Результат   
begin 
  Res := 0; 
  if Number >= Number_ then 
      Res := 1 + Division( Number - Number_, Number_ );  
       
  Result := Res; 
end;
Но оба варианта не дают результата. В чём может быть ошибка?
AZelensky вне форума Ответить с цитированием
Старый 18.04.2014, 17:06   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Проверьте параметры когда Вы вызываете Division(Number, Number_); уже в самой процедуре они получают какие значения? Точно меняются? Попробуйте ввести доп. переменные для Number и Number_ и передавайте их. Используйте второй вариант, он вроде получше первого. Вот кстати обратите внимание - для результата отдельная переменная заведена (хотя Вы можете также использовать Result в любом месте функции).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 19.04.2014, 10:16   #3
AZelensky
Пользователь
 
Регистрация: 15.11.2013
Сообщений: 52
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Проверьте параметры когда Вы вызываете Division(Number, Number_); уже в самой процедуре они получают какие значения? Точно меняются? Попробуйте ввести доп. переменные для Number и Number_ и передавайте их. Используйте второй вариант, он вроде получше первого. Вот кстати обратите внимание - для результата отдельная переменная заведена (хотя Вы можете также использовать Result в любом месте функции).
Спасибо большое. Дело было в том, что в рекурсивном вызове я передавал не ту переменную, вот и всё. Спасибо большое что открыли мне глаза

Вот бывший вариант:
Код:
function Division(Number, Number_: integer): integer;   
var   
  Res: integer;  // Результат   
begin 
  Res := 0; 
  if Number >= Number_ then 
      Res := 1 + Division( Number - Number_, Number);  
       
  Result := Res; 
end;
А вот исправленный:
Код:
// Деление нацело числа Number на Number_
function Division(Number, Number_: integer): integer;
var
  _Result: integer;  // Результат
begin
  _Result:= 0;
  if Number >= Number_ then
     _Result:= 1 + Division(Number - Number_, Number_);
  Result:= _Result;
end;
Вот как, казалось бы, мелочи,а могут испортить работу программы

Последний раз редактировалось AZelensky; 19.04.2014 в 10:19.
AZelensky вне форума Ответить с цитированием
Старый 19.04.2014, 10:22   #4
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
// Деление нацело числа Number на Number_
function Division(Number, Number_: integer): integer;
begin
  Result:= 0;
  if Number >= Number_ then
     Result:= 1 + Division(Number - Number_, Number_);
end;
Так не проще?
Кольша вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия unbanned Паскаль, Turbo Pascal, PascalABC.NET 7 19.01.2012 11:25
Рекурсия Лунатик222 Помощь студентам 0 26.12.2011 21:07
Рекурсия (C++) RAVAL(c) Помощь студентам 4 26.12.2011 01:18
Рекурсия (С) rublyabachka Помощь студентам 1 15.12.2011 02:11
Рекурсия Shadows_Behind Помощь студентам 6 26.05.2010 15:07