リストで動作する再帰関数があります。関数には、それ自体が呼び出されるループが含まれており、別の関数で終了しますg
。その構造は次のように類似しています。問題を単純化するために、l
常に要素が重複していないリストであると想定できます。
let rec f l = function
| [] -> g ()
| _ ->
List.fold_left
(fun acc x ->
let lr = List.filter (fun a -> (a <> x)) l in
acc + (f lr))
1 l
List.length l
この関数の複雑さをと の複雑さで表現する方法がわかりませんg
。
g
の複雑さと階乗に比例すると思いますがList.length l
、誰か確認できますか?