黄焖鸡米饭啊 2016-02-01 09:24 采纳率: 50%
浏览 1711
已采纳

蓝桥杯 未名湖的烦恼 fun(m-1,n)+fun(m,n-1)这句代码详细解释

#include "iostream"

using namespace std;

int fun(int m,int n)

{

if(m {
return 0;
}
else if (n==0)
{
return 1;
}
else return fun(m-1,n)+fun(m,n-1);
}
int main()
{
int m,n;
cout cin>>m>>n;

cout<<"有"<<fun(m,n)<<"排序方法"<<endl;

return 0;

}

  • 写回答

4条回答 默认 最新

  • 林深 2016-02-02 03:05
    关注

    fun(m,n)表示的是在还鞋的有m个,借鞋子的有n个的情况下,排队合法的情况的个数。也就是对m+n个人进行排队,且保证按照正确规则排列的队伍的数量。
    fun(m-1,n)+fun(m,n-1)拆成fun(m-1,n),fun(m,n-1):
    fun(m-1,n)表示当前最前面的一个位置,作为还鞋子的位置,那么剩下的人进行排队,能具有的合法的队伍的数量(合法指的是满足条件的队伍)。
    fun(m,n-1)表示当前最前面的一个位置,作为借鞋子的位置,那么剩下的人进行排队,能具有的合法的队伍的数量。
    整理一下思路:
    队伍长度为m+n,那么最前面的一个位置是换鞋子或者是借鞋子的话对后面的情况都是有影响的,如果最前面的位置是还鞋子的话,那么剩下的队伍长度为(m-1)+n,其中还鞋子的为m-1个,借鞋子的为n个,继续递归求这种情况的队伍合法数量
    ;如果最前面的位置是借鞋子的话,那么剩下的队伍长度为m+(n-1),其中还鞋子的为m个,借鞋子的为n-1个,继续递归求这种情况的队伍合法数量。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)