Пролог; попытаться сделать Фибоначчи более эффективным?

Это логическое программирование действительно заставляет танцевать на коленях мои императивные навыки программирования. Это домашнее задание, поэтому, пожалуйста, не присылайте мне ответ. Вот что у меня есть:

fibo(N,1) :-
   N < 2,
   !. 
fibo(N,R) :-
   N1 is N-1,
   N2 is N-2,
   fibo(N1,R1),
   fibo(N2,R2),
   R is R1+R2.

Я предполагаю создать другую функцию, которая выглядит так; fib (N, Значение, LastValue) . так что, пожалуйста, просто не бросай мне ответ. Вот что у меня есть:

fibo(N,1) :-
   N < 2,
   !. 
fibo(N,R) :-
   N1 is N-1,
   N2 is N-2,
   fibo(N1,R1),
   fibo(N2,R2),
   R is R1+R2.

Я предполагаю создать другую функцию, которая выглядит так; fib (N, Значение, LastValue) . так что, пожалуйста, просто не бросай мне ответ. Вот что у меня есть:

fibo(N,1) :-
   N < 2,
   !. 
fibo(N,R) :-
   N1 is N-1,
   N2 is N-2,
   fibo(N1,R1),
   fibo(N2,R2),
   R is R1+R2.

Я предполагаю создать другую функцию, которая выглядит так; fib (N, Значение, LastValue) . N - это n-е число, а значение - это возвращаемое значение. Я не понимаю, как это можно переписать с помощью накопления. И поскольку он считает в обратном порядке, я не понимаю, как он может «узнать» последнее значение, прежде чем что-либо вычислит. : s Любой вклад приветствуется.

9
задан repeat 1 October 2015 в 23:06
поделиться