2 3
1 2
目标:数列错位
递推思路:
假设已知 前 n 种错位排序 的值,求f(n+1);
首先---假设将第k个位置的值放在非第k个位置(位置与值相等-----这个你懂得!!!),那么 k 有 n 种放法;
然后---假设k放置在第1个位置,那么第一个位置的值有两种放法:
第一种:将第一位置的值放在第k个位置,那么这样的方法有 1 * f(n-1)种;
第二种:将第一位置的值放在非第k个位置,那么这样的方法有 f(n) 种。
import java.util.*;
class Main{
  public static void main(String args[]){
    Scanner sc = new Scanner(System.in);
    while(sc.hasNext()){
       int n = sc.nextInt();
       long f3=1,f2=1,f1=0;
       for(int i=3;i<=n;i++){
         f3=(i-1)*(f2+f1);
         f1=f2;
         f2=f3;
       }
       System.out.println(f3);
    }
  }
}
原文:http://blog.csdn.net/hncu1306602liuqiang/article/details/46388393