您的位置:首页 > 其它

简单的stirling数(实验)

2011-07-04 09:16 134 查看
简单的stirling数(实验)

这里假设容器是有区别的,数字也是有区别的。

假设n大于2,将这样的n个数放入到2个容器中,问有多少种放的方法?

有这样的推导思想,假设其中一个数放入到了任意一个容器中,那其它n-1个球中的每个球就有了两种选择方式,共有2^(n-1)种方式,不过要减去一种特殊情况,即后面n-1个球全部与第一个球放在一个格子的情况;所以共有2*{2^(n-1)-1}种情况

下面写程序来证明:

(defun formula (n)

(* 2

(+ (pow 2

(1- n))

-1)))

(defun pow (num count)

(if (or (> count 1) (eq count 1) )

(* num

(pow num

(- count 1) ) )

1))

(defun slayer ( count)

(if (or (> count 1) (eq count 1) )

(* count

(slayer

(- count 1) ) )

1))

(defun expr (n AContain BContain )

(if (> n 0)

(+ (expr (1- n)

(1+ AContain )

BContain)

(expr (1- n)

AContain

(1+ BContain)))

(if (or (eq AContain 0)

(eq BContain 0))

0

1)))

(defun test (n)

(if (> n 1)

(progn

(print (expr n 0 0))

(print 'compare)

(print (formula n))

(test (- n 1)))

(print 'over)))

[12]> (test 10)

1022

COMPARE

1022

510

COMPARE

510

254

COMPARE

254

126

COMPARE

126

62

COMPARE

62

30

COMPARE

30

14

COMPARE

14

6

COMPARE

6

2

COMPARE

2

OVER

OVER

注意前面推导过程中的思维方式,如果完全采用可以有空盒的推导方式,每个球有n个选择,故有2^n种方式,减去两个空盒的情况也可以得到正确答案;但前面的方式在通用以后也可以用到,因为它其中包括了一般递归思想;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: