这是老师上课讲的例题之一,也是一道特典型的递推。
在放代码之前,我们先求出公式:
一封信时结果为000种可能性,两封信时结果为111种,三封信时222种……你可以再多推算几步,得知如果索引从111开始,在减少一封信后,将得出i−1i-1i−1封完全错排的信及最后一封位置正确的信,交换前面的任意一封信和最后一封即可。去掉两封信后同理,最终可得a[i]=(a[i−1]+a[i−2])∗(i−1)a[i]=(a[i-1]+a[i-2])*(i-1)a[i]=(a[i−1]+a[i−2])∗(i−1),注意接下来我的代码中索引从0开始,因此略有改动。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
不想听的话,注释里也有思路的大致解析,当然肯定没有自己想来的效果。