Solve Josephus Problem Using Erlang

Josephus(约瑟夫)问题的数学方法

%%%----------------------------------------------------------------
%%% @author Genesislive <genesislive@126.com>
%%% 	[https://]
%%% @copyright 2013 
%%% @doc josephus problem
%%% @end
%%%----------------------------------------------------------------
-module(josephus).
 
-export([josephus_it/2, josephus/2]).
 
%%-----------------------------------------------------------------
%% @doc solve josephus problem
%%		fun(1) = 0,	一个人;
%%		fun(n) = (fun(n - 1) + m) % n,  n个人
%% @spec josephus_it(N, M) -> integer()
%% where
%%  N:integer() number of people
%%  M:integer() mth people	
%% @end
%%-----------------------------------------------------------------
josephus_it(1, _) -> 0;
josephus_it(N, M) ->
	(josephus_it(N - 1, M) + M) rem N.
 
%%-----------------------------------------------------------------
%% @doc
%% @end
%%-----------------------------------------------------------------
josephus(N, M) ->
	lists:foldl(fun(I, S) ->
				   % io:format("~p~n", [((S + M) rem I)]),
				   ((S + M) rem I)
				end, 0, lists:seq(2, N)).


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值