Форум программистов, компьютерный форум, киберфорум
Наши страницы
Lisp
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
ДимКо
4 / 4 / 2
Регистрация: 26.10.2012
Сообщений: 155
1

Определить две рекурсивных функции

12.04.2013, 16:37. Просмотров 550. Ответов 4
Метки нет (Все метки)

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

Указание к выполнению задания.
В данном задании все операции над списками выполняются только с элементами верхнего уровня, хотя списки могут содержать под списки. Рекурсия выполняется только в направлении CDR списка.
0
Миниатюры
Определить две рекурсивных функции  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2013, 16:37
Ответы с готовыми решениями:

Определить две рекурсивных функции
Пожалуйста, помогите определить две рекурсивных функции. Распечатать результаты трассировки....

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

Определить две рекурсивных функции
В данном задании все операции над списками выполняются только с элементами верхнего уровня, хотя...

Рекурсия, ряд Фибоначчи (определить количество рекурсивных вызовов функции)
Здравствуйте, уважаемые форумчане ! Подскажите, пожалуйста, как определить количество...

Разработка рекурсивных алгоритмов для вычисления функции
Сразу к сути!!! Я должен сделать рекурсию функции y=x+3-e^-x. Что то y2 не выводит, ошибок нету! ...

4
Catstail
Модератор
24496 / 12422 / 2264
Регистрация: 12.02.2012
Сообщений: 20,172
12.04.2013, 17:24 2
б)

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun sum3 (lst n)
  (cond ((= n 0) 0)
        (t (+ (car lst) (sum3 (cdr lst) (1- n))))))
 
==> sum3
 
(sum3 '(1 2 3 4 5 6) 3)
 
==> 6
 
(sum3 '(1 2 3 4 5 6) 4)
 
==> 10
1
_sg
4098 / 3848 / 289
Регистрация: 12.05.2012
Сообщений: 2,707
12.04.2013, 17:30 3
Lisp
1
2
3
4
5
6
7
(defun compress (w &optional b)
  (cond ((null w) nil)
        ((equal (car w) b) (compress (cdr w) b))
        ((cons (car w) (compress (cdr w) (car w))))))
 
> (compress '(a a b c c c d e e))
(A B C D E)
Добавлено через 3 минуты
Lisp
1
2
3
4
5
(defun sum-ns (n w)
  (if (zerop n) 0 (+ (car w) (sum-ns (1- n) (cdr w)))))
 
> (sum-ns 4 '(1 1 1 1 1))
4
2
Catstail
Модератор
24496 / 12422 / 2264
Регистрация: 12.02.2012
Сообщений: 20,172
12.04.2013, 17:55 4
_sg, у Вашего кода сжатия есть недостаток:

Lisp
1
2
3
4
5
6
7
8
9
10
(defun compress (w &optional b)
  (cond ((null w) nil)
        ((equal (car w) b) (compress (cdr w) b))
        (t (cons (car w) (compress (cdr w) (car w))))))
 
==> compress
 
(compress '(nil nil 2 3 6 6 6))
 
==> (2 3 6)
Лучше так:

Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
(defun press (lst &optional res beg)
  (cond ((null lst) (reverse res))
        ((null beg) (press (cdr lst) (list (car lst)) t))
        ((equal (car lst) (car res)) (press (cdr lst) res t))
        (t (press (cdr lst) (cons (car lst) res) t)))) 
 
==> press
 
(press '(nil nil 2 3 6 6 6))
 
==> (NIL 2 3 6)
 
(press '(nil nil 2 3 nil nil nil 6 6 6))
 
==> (NIL 2 3 NIL 6)
В Ваш код тоже можно ввести флаг beg, получится быстрее, чем у меня.
1
_sg
4098 / 3848 / 289
Регистрация: 12.05.2012
Сообщений: 2,707
13.04.2013, 09:08 5
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
(defun compress (w)
  (cond ((null w) nil)
        ((equal (car w) (cadr w)) (compress (cdr w)))
        ((cons (car w)
               (labels ((press (w b)
                          (cond ((null w) nil)
                                ((equal (car w) b) (press (cdr w) b))
                                ((cons (car w)
                                       (press (cdr w) (car w)))))))
                 (press (cdr w) nil))))))
 
> (compress '(nil nil nil a a b c nil nil nil c c d e e nil nil nil))
(NIL A B C NIL C D E NIL)
Lisp
1
2
3
4
5
6
7
8
9
(defun compress (w &optional b f)
  (cond ((null w) nil)
        (f (if (equal (car w) b)
               (compress (cdr w) b t)
               (cons (car w) (compress (cdr w) (car w) t))))
        ((cons (car w) (compress (cdr w) (car w) t)))))
 
> (compress '(nil nil nil a a b c nil nil nil c c d e e nil nil nil))
(NIL A B C NIL C D E NIL)
Lisp
1
2
3
4
5
6
7
(defun compress (w &optional b f)
  (cond ((null w) nil)
        ((and f (equal (car w) b)) (compress (cdr w) b t))
        ((cons (car w) (compress (cdr w) (car w) t)))))
 
> (compress '(nil nil nil a a b c nil nil nil c c d e e nil nil nil))
(NIL A B C NIL C D E NIL)
2
13.04.2013, 09:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2013, 09:08

Даны две функции, определить координаты точек пересечения их графиков
Даны две функции: y1=5x+0.2x^2+3 y2=2x-x^2+10 Определить...

С помощью рекурсивных функций определить операции нахождения суммы
Пусть для целых неотрицательных чисел n, m разрешены операции нахождения последующего числа (n + 1)...

Составить блок-схему. Заданные две функции Y1 = F1 (X), Y2 = F2 (X). Определить общие участка роста
Заданные две функции Y1 = F1 (X), Y2 = F2 (X). Определить общие участка роста


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru