题意:有还鞋和借鞋两种人, 求满足条件且不至于没鞋借的情况。
思路:此题是一个递归的问题,需要将大问题转化为小问题,分解成两种情况,fangAn(m,n) = fangAn(m-1,n)+fangAn(m,n-1),最终将问题最简化,从递归出口终止。可以演算fangAn(3,2),粘贴大佬的演算过程。
最终都是转化为了fangAn(1,0)、fangAn(0,1)了类似的,m<n一类表示无法满足则返回0,m,0表示能够满足则返回1,代表递归出口。
代码:
#include <iostream>
using namespace std;
int fangAn(int m,int n){
if(m<n)return 0;//m<n和n==0是两个出口,m<n表示无法满足需求
if(n==0)return 1;//n==0表示呢能够满足
else return fangAn(m-1,n)+fangAn(m,n-1);//分解问题为子问题
}
int main(int argc, char** argv) {
int m,n;//m是还鞋的人,n是借鞋的人
cin>>m>>n;
cout<<fangAn(m,n);
return 0;
}