fib(N)->
P1 = spawn(fun concFib:conFib/0),
P2 = spawn(fun concFib:conFib/0),
X=rpc(P1,N-2),Y=rpc(P2,N-1),X+Y.
conFib()->
receive
{Client,N} -> Client ! regfib(N)
end.
rpc(Pid,Request)->
case erlang:is_process_alive(Pid) of
true -> begin
Pid ! {self(),Request},
receive
{Pid,Respond} -> Respond
end
end;
false -> io:format("~w process is dead.",[Pid])
end.
regfib(N)->
case N<2 of
true -> 1;
false -> regfib(N,1,1,1)
end.
regfib(N,N,X,_)-> X ;
regfib(N,M,X,Y)-> regfib(N,M+1,X+Y,X).
アイデアは、fib(N) プロセスを 2 つのプロセスに分割し、1 つが fib(N-2) を計算し、もう 1 つが calc を計算することです。fib(N-1)と同時にfib(N)=fib(N-1)+fib(N-2)。前のコードを実行しても何も起こらず、有限ループのようにカーソルが停止するか、結果が到着しないのを待っています。
plzzz 私は助けが必要です 私は新しい Erlang プログラマーです。よろしくお願いします :)