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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.03.2012, 21:21   #1
Ника-Вероника
Пользователь
 
Регистрация: 12.03.2012
Сообщений: 15
По умолчанию рекурсия

Функция f(n) определена на множестве натуральных чисел следующим образом:
f(n)= система
1, если n=1;
значек суммыf(n div i), где i=2 до n , если n>=2.
Вычислите значение данной функции для заданного значения n.
Помогите пожалуйста!
Ника-Вероника вне форума Ответить с цитированием
Старый 18.03.2012, 22:09   #2
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Если я все правильно понял

И зачем тут рекурсия?
Код:
function func(n:integer):integer;
  var
    i:integer;
  begin
    func:=0;
    if n=1 then
      func:=1
    else
      for i:=2 to n do
        func:=func+(n div i);
  end;
Все тривиальное просто

Последний раз редактировалось whatever; 18.03.2012 в 22:15.
whatever вне форума Ответить с цитированием
Старый 19.03.2012, 16:37   #3
rubius2008
Форумчанин
 
Регистрация: 19.03.2010
Сообщений: 409
По умолчанию

Код:
function f(n:integer):integer;
var i,s:integer;
begin
  if n=1 then f:=1 
  else begin 
            s:=0;
            for i:=2 to n do s:=s+f(n div i);
            f:=s;
         end;
end;
Есть вопросы, пишите в ЛС.
rubius2008 вне форума Ответить с цитированием
Старый 19.03.2012, 19:45   #4
Ника-Вероника
Пользователь
 
Регистрация: 12.03.2012
Сообщений: 15
По умолчанию

Большое спасибо! У нас просто тема "Рекуррентные соотношения. Рекурсии"
Ника-Вероника вне форума Ответить с цитированием
Старый 21.03.2012, 12:30   #5
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Цитата:
Большое спасибо!
За не правильно решенную задачу. "двойку" еще не поставили?)
Решать примерно так:
Код:
function f(n,i:longint):longint;
begin 
  if (n=1)or(i=n) then f:=1
                  else f:=f(n,i+1)+n div i;
end;
var a:longint;
begin
  readln(a);
  writeln(f(a,2));
end.
он хоть правильный ответ выдает)
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Старый 21.03.2012, 16:07   #6
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

А все из-за того, что задания нужно правильно формулировать. Я, например, вообще f не заметил в
Цитата:
значек суммыf(n div i)
Все тривиальное просто
whatever вне форума Ответить с цитированием
Старый 23.03.2012, 21:43   #7
Plague
Забанен
Форумчанин Подтвердите свой е-майл
 
Аватар для Plague
 
Регистрация: 01.11.2006
Сообщений: 420
По умолчанию

Хотя чуть поправив код из 3 поста, можно сделать так:
Код:
function f(n:integer):integer;
var i,s:integer;
begin
  if n=1 then f:=1 
  else begin 
            s:=0;
            for i:=2 to n do s:=s+f(n div i);
         end;
    f:=s; 
end;
Если ничто другое не помогает, прочтите, наконец, инструкцию! Аксиома Кана
Plague вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия McJordan Паскаль, Turbo Pascal, PascalABC.NET 5 18.12.2010 19:46
Рекурсия dusya9992 Паскаль, Turbo Pascal, PascalABC.NET 4 29.08.2010 14:14
Рекурсия DrDre Паскаль, Turbo Pascal, PascalABC.NET 0 25.08.2010 21:50
рекурсия Lena neznayka Помощь студентам 2 16.06.2010 20:46
Рекурсия Solnze2 Паскаль, Turbo Pascal, PascalABC.NET 0 09.06.2010 09:28