Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Найти сумму двух предыдущих четных (нечетных), рекурсия 
:(
    Опции темы
ahito1
Дата 9.3.2013, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 20.8.2007

Репутация: нет
Всего: -1



Никак не могу построить рекурсивную функцию для вычисления n-го члена последовательности, в которой каждый четный член равен сумме двух предыдущих четных, а нечетный равен сумме двух предыдущих нечетных

PM MAIL   Вверх
Stolzen
Дата 9.3.2013, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 1
Всего: 48



Под четными и нечетными подразумеваются порядковые номера элементов в списке? 
Если так, то можно четные и нечетные элементы хранить в разных списках, и тогда функция будет следующей

Код

sum(left, right):
    a = head left
    b = head tail left
    sum(right, [(a + b) | left])


| - это присоединение элемента к списку
head - извлечение первого элемента из списка
tail - список без первого элемента


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
ahito1
Дата 9.3.2013, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 20.8.2007

Репутация: нет
Всего: -1



помогите перевести код с джавы на пролог

public class MyClass{

 public static void main(String [] args){
    int nom=10;
    System.out.println(Rec(nom));
 }

 public static int Rec(int n){
    int result=0;
    if (n>4){
        result = Rec(n-2) + Rec(n-4);
    }
    else{
        return n;
    }
    return result;
 }

}
PM MAIL   Вверх
Stolzen
Дата 10.3.2013, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

Репутация: 1
Всего: 48



Я не очень хорошо пролог помню, но я посмотрел синтаксис в вики, и у меня получилось следующее

Код

rec(n) :- n > 4, rec(n - 2) + rec(n - 4).
rec(n) :- n <= 4, n.

main :- 
    rec(10).



--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
ahito1
Дата 10.3.2013, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 20.8.2007

Репутация: нет
Всего: -1



Цитата(Stolzen @ 10.3.2013,  00:06)
Я не очень хорошо пролог помню, но я посмотрел синтаксис в вики, и у меня получилось следующее

Код

rec(n) :- n > 4, rec(n - 2) + rec(n - 4).
rec(n) :- n <= 4, n.

main :- 
    rec(10).

никак не могу заставить Visual Prolog запустить его:(
PM MAIL   Вверх
ahito1
Дата 10.3.2013, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 20.8.2007

Репутация: нет
Всего: -1



для чисел фибоначи
f(1,1) :– !.    % Первое число есть1 
f(2,1) :– !.    % Второе число есть2 
f(I,R) :– I>2, I1=I–1, I2=I–2, f(I1,M), f(I2,N), R=N+M. % общий случай

а для моего случая
никак не могу написать, не работает:
class predicates
   f : (integer I, integer R) nondeterm anyflow.
clauses
   f(1,R) :- R=1.
   f(2,R) :- R=2.
   f(3,R) :- R=3.
   f(4,R) :- R=4.
   f(I,R) :- I>4, I1=I-2, I2=I-4, f(I1, M), f(I2, N), R=N+M.

PM MAIL   Вверх
ahito1
Дата 10.3.2013, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 20.8.2007

Репутация: нет
Всего: -1



ПОБЕДА!!! заработало! если кому нужен код, кину
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума Prolog
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Prolog | Следующая тема »


 




[ Время генерации скрипта: 0.0720 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.