特殊的组合问题(解复杂的问题)
设a(n)=C(n,0)+2*2^1*C(n,1)+3*2^2*C(n,2)+...+(n+1)*2^n*C(n,n)
还是采用差分方程的思维有:
a(n+1)=C(n+1,0)+2*2^1*C(n+1,1)+3*2^2*C(n+1,2)+...+(n+1)*2^n*C(n+1,n)+ (n+2)*2^(n+1)*C(n+1,n+1)
Go
a(n+1)-a(n)=2*2^1*C(n,0)+3*2^2*C(n,1)+(n+1)*2^n*C(n,n-1)+ (n+2)*2^(n+1)*C(n+1,n+1)
Go
a(n+1)-a(n)=2*2^1*C(n,0)+3*2^2*C(n,1)+...+(n+1)*2^n*C(n,n-1)+ (n+2)*2^(n+1)*C(n,n)
Go
由观察有:
2*a(n)=2^1*C(n,0)+2*2^2*C(n,1)+3*2^3*C(n,2)+...+(n+1)*2^(n+1)*C(n,n)
Go
a(n+1)-a(n)-2*a(n)=1*2^1*C(n,0)+1*2^2*C(n,1)+...+1*2^n*C(n,n-1)+ 1*2^(n+1)*C(n,n)
Go
运用牛顿公式可以知道右边2*(1+2)^n
a(n+1)-3*a(n)=2*3^n
Go
公式a(n)=3^n*( {2/3}*n+1)
下面写程序来证明:
(defun pow (num count)
(if (or (> count 1) (eq count 1) )
(* num
(pow num
(- count 1) ) )
1))
(defun slayerex (num count)
(if (or (> count 1) (eq count 1) )
(* num
(slayerex
(1- num)
(- count 1) ) )
1))
(defun slayer ( count)
(if (or (> count 1) (eq count 1) )
(* count
(slayer
(- count 1) ) )
1))
(defun expr (init n)
(if (eq n 0)
1
(+ (expr init (1- n) )
(* (1+ n)
(pow 2
n)
(/ (slayerex init n)
(slayer n))))))
(defun formula (n)
(* (pow 3 n)
(+ (* 2/3
n)
1)))
(defun test (n)
(if (> n 0)
(progn
(print (expr n n))
(print 'compare)
(print (formula n))
(test (- n 1)))
(print 'over)))
(test 100)