int f (int n) {
if(n==1)return 0; // 一个元素没有错排
if(n==2)return 1; // 二个元素一种错排
return(n-1)*(f(n-1)+f(n-2)); //递推式
}
有n个数错排 :第一个数有除一以外的(n-1)种,倘若它在第k个元素的位置上,对于第k个元素而言,它所在的位置就有两种可能—第一种,它处在非第一个元素①位置上,接下来就相当于是n-1个元素的错排,即 f(n-1);
第二种,它处在第一个元素①的位置上,所以在排列D(n)中有两个元素找到了位置,那么接下来的队列就相当于是n-2个元素的错排。f(n-2) 最终递推式
f(n) = (n-1)*[f(n-1)+f(n-2)]
法二: 通过组合数学母函数的求解
括号内为 的泰勒展开, 最接近 n!/e 的整数是错排个数