ID3(事例集合 S, 属性名のリスト Alist)
{
    node=決定木の節点を生成する
    if(S中の全ての事例が同じクラス) {
	nodeにそのクラスをラベル付けする
	return(node);
    }
    if(Alistが空) {
	nodeにS中の事例が最も多くとるクラスをラベル付けする
	return(node);
    }
    A=Alistの中でSを最も良く分類する(例えば,獲得情報量最大の)属性
    nodeの判定のための属性をAとする
    for(each 属性値v of A) {
	nodeにA=vという判定を行う枝を追加する
	Sv=S中でA=vとなる事例の集合
	if(Svが空) {
	    new=新しい節点を生成する
	    newにS中の事例が最も多くとるクラスをラベル付けする
        }
	else
	    new=ID3(Sv, Alist-{A});
	追加した枝にnewを接続する
    }
    return(node);
}