错位排列问题(递推法)

这篇博客探讨了错位排列的问题,即n个信封和n个信件如何通过递推法找出所有不正确匹配的方法数。博主介绍了递推公式 f(n) = (n-1) * (f(n-1) + f(n-2)),并给出了边界条件 f(1) = 0 和 f(2) = 1。最后,提到了实现该算法的代码参考来源。
摘要由CSDN通过智能技术生成

问题描述

有n个信封和n个信件,第ii个信件属于第i个信封,我们想知道,有多少种不同的方法,使得没有任何一个信件被装入正确的信封中?

思路

采用递推法。 假设当信和信封的个数为n时,错位排列的个数记为 f ( n ) f(n) f(n)
假设第n封信装入了第i个信封,i 可以取 [1, n-1]。 那么接下来有两种情况:

1 . 第i封信装入了第n个信封 : 此时还剩下 n - 2 个序号对应的信和信封,此时对应信和信封数为n-2时的错位排列数 f ( n − 2 ) f(n -2) f(n2)

2 . 第i封信没有装入第n个信封 : 此时还剩下了 n-1 封信和信封,但是序号为 i 和 n 的信和信封出现了错位: i号信封 和 n号信 已经被排除, 但是 第 i 号信 第 n 号信封 还存在。 但是巧妙的是,因为情况的约束,第 i 封信 此时不能放入 第 n 号信封, 事实上也构成了一个 个数为 n - 1 的错位排列 f ( n − 1 )

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值