寄信收信问题

问题

在一个村庄里有i个人,他们每个人只能寄出一封信,接收一封信,并且不能给自己寄信。那么请问一共有多少种寄信收信方式。

思路

遇到此类问题,应该从简单的情况考虑。比如,当村里只有两个人的时候,只有一种寄信方法;如果有两个人的时候,A,B,C,A可以寄信给B或者C,这两种情况下剩余的人没有别的寄信方法,所以只有两种方法;当有四个人的时候,我们假设A把一封信给了B,此时B有两种情况:把信寄给A,那么此时就只有CD两个人,而两个的时候我们已经分析了,另一种情况是不把信寄给A,此时A和B可以看作一个人,因为他们俩现在是可以寄出去一封信和收到一封信,看作一个人,此时一共是有三个人,三个人的情况我们已经分析过。所以我们的递推公式已经得到,接下来就是代码了。很简单
在这里插入图片描述

代码

public static int f(int i) {
	if(i<=2) return i-1;
	return (i-1)*(f(i-1)+f(i-2));
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值