自己的发现
mysin x的展开式为x+x^3/3!+x^5/5!+...
mycos x的展开为1+x^2/2!+x^4/4!+...
观察系数,并且联系有公式mysin 2*x= 2* mysin x *mycos x
现在可以假设这样的问题存在,假设有1,和2两个数,要求用这两个数组成任意的n位数,要求1出现的个数为奇数,2出现的个数为偶数(0也为偶数),求针对特定n位数的可能个数?
这里正好可以应用前面的公式有:
mysin x* mycos x=1/2* mysin (2*x)=1/2*{ (2*x)+(2*x)^3/3!+(2*x)^5/5!+...}
这样可以得到三位数的个数是2^3/2=4,五位数的个数是2^5/2=16....而实践中也能发现n只能是奇数。
下面从公式的推导上写程序来证明:
(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 slayerex (num count )
(if (or (> count 1) (eq count 1) )
(* num
(slayerex
(- num 1)
(- count 1) ) )
1))
(defun expr (n high)
(if (eq n 1)
(/ (slayerex high
(- high
n))
(slayer (- high
n)))
(+ (expr (- n
2)
high)
(* (slayerex high
(- high
n))
(/ 1.0
(slayer (- high
n)))))))
(defun formula (n)
(pow 2.0
(1- n)))
(defun test (n)
(if (> n 0)
(progn
(print (expr n n))
(print 'compare)
(print (formula n))
(test (- n 2)))
(print 'over)))
(test 31)
注意这里不能以sin x 和cos x做实验,因为它们的形式幂级数中有负号,这不符合部分排列选择的条件.