Форум программистов, компьютерный форум, киберфорум
Lisp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54

рекурсивная функция

13.05.2012, 23:37. Показов 1525. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
помогите решить задачу.

начав тренировки,спортсмен в первый день пробежал 10 км. Каждый день он увиличивал дневную норму на 10% от нормы предыдущего дня. С помощью рекурсивной функции найти день,когда суммарный пробег впервые будет больше 60 км.

помогите пожалуйста..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2012, 23:37
Ответы с готовыми решениями:

Рекурсивная функция
Определить две рекурсивных функции в соответствии с номером варианта. Распечатать результаты трассировки. Указать вид рекурсии...

Рекурсивная функция ANCESTORS
2.Определить рекурсивную функцию ANCESTORS, которая возвращает список предков для любого представителя генеалогического дерева. Например, ...

Локальная рекурсивная функция
есть функция f. в теле этой функции в некотором месте задана рекурсивная локальная функция посредством labels. вопрос - возможно ли каким...

11
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
13.05.2012, 23:49
Lisp
1
2
3
4
5
6
7
8
(defun f (limit &optional (n 1) (distance 10) (sum distance))
  (if (> sum limit)
      n
      (let ((new-distance (* 1.1 distance)))
        (f limit (1+ n) new-distance (+ new-distance sum)))))
 
CL-USER> (f 60)
5
1
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
14.05.2012, 19:52  [ТС]
Цитата Сообщение от bokunopico Посмотреть сообщение
Lisp
1
2
3
4
5
6
7
8
(defun f (limit &optional (n 1) (distance 10) (sum distance))
  (if (> sum limit)
      n
      (let ((new-distance (* 1.1 distance)))
        (f limit (1+ n) new-distance (+ new-distance sum)))))
 
CL-USER> (f 60)
5
если честно,то я не понимаю что вы сделали(
напишите пожалуйста как-то проще или может на словах,чтоб я могла разобраться.
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
14.05.2012, 19:53
Цитата Сообщение от vipusknik Посмотреть сообщение
я не понимаю что вы сделали
Я тоже.
0
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
14.05.2012, 20:19  [ТС]
Цитата Сообщение от bokunopico Посмотреть сообщение
Я тоже.
а на словах не обьясните?
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
14.05.2012, 20:23
Цитата Сообщение от vipusknik Посмотреть сообщение
а на словах не обьясните?
Я не сам делал, в интернете нашёл.
0
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
14.05.2012, 20:25  [ТС]
Цитата Сообщение от bokunopico Посмотреть сообщение
Я не сам делал, в интернете нашёл.
блииннн
0
313 / 268 / 5
Регистрация: 03.04.2011
Сообщений: 456
14.05.2012, 20:40
Я даже Лиспа не знаю, но тут всё просто:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
;; Определяем функцию с одним обязательным аргументом limit
;; (значение суммарного пробега, которое спортсмен должен преодолеть за искомое число дней)
;; и тремя необязательными (опциональными):
;; n - количество дней (по умолчанию 1)
;; distance - расстояние, которое пробегает спортсмен за день (начинаем с 10)
;; sum - суммарный пробег (изначально равен значению distance, т.е. 10)
(defun f (limit &optional (n 1) (distance 10) (sum distance))
  (if (> sum limit)  ; Проверяем, превысил ли суммарный пробег установленный лимит
      n              ; Если да - возвращаем значение переменной n (счётчика дней) 
      (let ((new-distance (* 1.1 distance))) ; Если нет - увеличиваем на 10% расстояние, пробегаемое спортсменом,
                                             ; увеличиваем счётчик дней на 1 (1+ n),
                                             ; увеличиваем суммарный пробег на новое значение дистанции, пробегаемой спортсменом
        (f limit (1+ n) new-distance (+ new-distance sum)))))  ; И рекурсивно вызываем f с вышеозначенными значениями
2
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38171 / 21106 / 4307
Регистрация: 12.02.2012
Сообщений: 34,699
Записей в блоге: 14
14.05.2012, 20:44
Цитата Сообщение от bokunopico Посмотреть сообщение
Я даже Лиспа не знаю,
Я оценил...
0
 Аватар для vipusknik
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 54
14.05.2012, 20:55  [ТС]
ну примерно поняла. спасибо
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
15.05.2012, 02:50
Вариант с
ленивыми списками
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
(defmacro delay (form)
  `(lambda () ,form))
 
(defun force (thunk)
  (funcall thunk))
 
(defmacro cons-stream (car &optional cdr)
  `(cons ,car (delay ,cdr)))
 
(defun car-stream (stream)
  (car stream))
 
(defun cdr-stream (stream)
  (force (cdr stream)))
 
(defun iterate (fun val)
  (cons-stream val (iterate fun (funcall fun val))))
 
(defun curry (fun arg &rest args1)
  (lambda (&rest args2)
    (apply fun arg (append args1 args2))))
 
(defun take-while (pred stream)
  (when (and stream (funcall pred (car-stream stream)))
    (cons-stream (car-stream stream)
                 (take-while pred (cdr-stream stream)))))
 
(defun length-stream (stream)
  (if (null stream)
      0
      (1+ (length-stream (cdr-stream stream)))))


Lisp
1
2
3
4
5
(defun f (limit &optional (init-dist 10) &aux (sum 0))
  (1+ (length-stream
       (take-while (lambda (dist)
                     (<= (incf sum dist) limit))
                   (iterate (curry #'* 1.1) init-dist)))))
1
15.05.2012, 02:56

Не по теме:

Лучше ленивых списков только монады!
Nameless One, эту задачу не глянешь?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2012, 02:56
Помогаю со студенческими работами здесь

Рекурсивная функция MAKE-LIST
Добрый день. Помогите найти ошибку в решении задачи. Напишите указанную рекурсивную функцию. Сравните результат её работы с аналогичной...

Рекурсивная функция, для работы со списками
Доброе время суток. Вообщем имеется два списка, из них нужно найти минимальный и максимальный элемент, а после посчитать по формуле...

Что выполняет следующая рекурсивная функция?
Что выполняет следующая рекурсивная функция? (defun mystery (n) (cond ((zerop n) 1) (t (+ n (mystery (- n 1)))))) ...

Рекурсивная функция для вычисления корня квадратного
Вычислить с точностью до 6 знаков, сравнив по числу шагов, рекурсивную формулу {q}_{n+1}=\frac{1}{2}\left({q}_{n}+\frac{14}{q}_{n}...

Рекурсивная функция, меняющая порядок элементов в списке
Дана рекурсивная функция, которая меняет порядок элементов в списке. Например: &gt;(total-reverse ‘(a b (c (d e (f g))))) ((((G...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru