N个人都不坐自己位置的情况有几种

it2024-07-09  104

* 问题描述:n个人每个人都有自己的位置,问每个人都不坐自己的位置有几种情况 * 思路很简单:递归 * 第一个人可以做其他n-1个位置,当第一个人做每一个位置,比如说第一个人坐2号位置和3号位置的情况是一样多的。 * 然后当第一个人坐2号位置,剩下的情况和原问题并不等价 * 因为原问题每个人都有自己的位置,但是现在子问题2号没有自己的位置,只有多了一个1号位置 * 我们暂时把1号位置认为就是2号自己的位置,不能做的,那么子问题和原问题一样了,子问题是f(n-1) * 但是事实上2号是可以坐1号位置的,所以我们要再添加一种情况,就是2号坐在1号位置上的情况, * 它是一个更小的子问题,就是f(n-2) package DynamicAndRecursive; public class NN { /** * 问题描述:n个人每个人都有自己的位置,问每个人都不坐自己的位置有几种情况 * 思路很简单:递归 * 第一个人可以做其他n-1个位置,当第一个人做每一个位置,比如说第一个人坐2号位置和3号位置的情况是一样多的。 * 然后当第一个人坐2号位置,剩下的情况和原问题并不等价 * 因为原问题每个人都有自己的位置,但是现在子问题2号没有自己的位置,只有多了一个1号位置 * 我们暂时把1号位置认为就是2号自己的位置,不能做的,那么子问题和原问题一样了,子问题是f(n-1) * 但是事实上2号是可以坐1号位置的,所以我们要再添加一种情况,就是2号坐在1号位置上的情况, * 它是一个更小的子问题,就是f(n-2) */ public static int nn(int n){ if(n == 1){ return 0; }; if(n == 2){ return 1; } return (nn(n - 1) + nn(n - 2)) * (n - 1); } public static void main(String[] args){ System.out.print(nn(4)); } }

 

最新回复(0)