KornShell用于生成具有n个对象的集合中的k个对象的组合数

时间:2014-01-09 05:45:15

标签: algorithm shell math scripting ksh

任何人都可以帮助使用KornShell(ksh)获取代码来生成n个对象的集合中k个对象的组合数是n C k吗? 例如,{1,2,3,4}一次取k = 2的组合是{1,2},{1,3},{1,4},{2,3},{2, 4},{3,4},总共6 =4/ [(2)(4-2)]子集。

1 个答案:

答案 0 :(得分:1)

@Ned Nowotny是对的,sh不适合这样做

说,这是递归形式:

> function cr { integer n=$1 k=$2; if ((k==1)); then print $n; elif ((k==n)); then print 1; else print $(($(cr $((n-1)) $((k-1))) + $(($(cr $((n-1)) $k))))); fi; }
> cr 4 2
6
> 

这是更快的阶乘形式:

> function fact { integer x=$1 f=1; while ((x>0)) do : $((f*=x--)); done; print $f; }
> function cf { integer n=$1 k=$2; print $(($(fact $n)/($(fact $k)*$(fact $(($n-$k)))))); }
> cf 4 2
6
>