简单的stirling数(实验)

来源:互联网 发布:小米5不能用4g网络 编辑:程序博客网 时间:2024/06/06 11:44
简单的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种方式,减去两个空盒的情况也可以得到正确答案;但前面的方式在通用以后也可以用到,因为它其中包括了一般递归思想;

原创粉丝点击