该问题的变形如下:
例如有{ n}封写好了的信,收件人不同,胡乱放入{ n}个写了地址的信封中,寄出,求没有一个收件人收到他所应接收的信的概率。
问题解决
首先考虑几种简单的情况:
原序列长度为1
序列中只有一个元素,位置也只有一个,这个元素不可能放在别的位置上,因此原序列长度为1时该为题的解是0。
原序列长度为2
设原序列为{a,b},则全错位排列只需将两个元素对调位置{b,a},同时也只有这一种可能,因此原序列长度为2时该问题的解是1。
原序列长度为3
设原序列为{a,b,c},则其全错位排列有:{b,c,a},{c,a,b},解是2。
原序列长度为4
设原序列为{a,b,c,d},则其全错位排列有:{d,c,a,b},{b,d,a,c},{b,c,d,a},{d,a,b,c},{c,d,b,a},{c,a,d,b},{d,c,b,a},{c,d,a,b},{b,a,d,c},解是9。关概率为9/24 = 37.5%
#!/usr/bin/env python
# _*_ coding:utf-8 _*_
'''
错位排列
'''
def wrongPos(n):
if n==1:
return 0
if n== 2:
return 1
return (n-1)*(wrongPos(n-2)+wrongPos(n-1))
if __name__ == '__main__':
for i in range(1,100):
print(i,'的错位排序数为:',wrongPos(i))