简单的stirling数(区别)

简单的stirling数(区别)
这里假设容器是没有区别的,数字也是有区别的。
这样就是说,比如1,3放第一个盒,2,4放第二个盒与1,3放第二个盒,2,4放第一个盒是一样的;
假设n大于2,将这样的n个数放入到2个容器中,问有多少种放的方法?
有这样的推导思想,假设其中一个数放入到了任意一个容器中,那其它n-1个球中的每个球就有了两种选择方式,共有2^(n-1)种方式,不过要减去一种特殊情况;注意在这里就不需要除以2了,第一个球就相当于一个支点;
所以在写程序的时候就将第一个点做为默认的,而只考虑后面的n-1个点的情况;






下面写程序来证明:
(defun  formula  (n)
(+ (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)))


特别注意其中expr参数的变化


(defun  test (n)
(if (> n 1)
  (progn 
       (print (expr (1- n)  1  0))
       (print  'compare)
       (print (formula n))       
       (test (- n 1)))
  (print 'over)))


[17]> (test  10)


511
COMPARE
511
255
COMPARE
255
127
COMPARE
127
63
COMPARE
63
31
COMPARE
31
15
COMPARE
15
7
COMPARE
7
3
COMPARE
3
1
COMPARE
1
OVER
OVER


思维:用(print (expr (1- n)  0  1))替换test函数的对应部分,结果也是对的;







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值