问题描述
由 A , B , C A,B,C A,B,C这3个字母就可以组成许多串。
比如:" A A A"," A B AB AB"," A B C ABC ABC"," A B A ABA ABA"," A A C B B AACBB AACBB"……现在,小明正在思考一个问题:如果每个字母的个数有限定,能组成多少个已知长度的串呢?
他请好朋友来帮忙,很快得到了代码,解决方案超级简单,然而最重要的部分却语焉不详。
请仔细分析源码,填写划线部分缺少的内容。
#include<iostream>
using namespace std;
int f(int a, int b, int c, int n)
{
if(a<0 || b<0 || c<0) return 0;
if(n==0) return 1;
return ___________;
}
int main()
{
printf("%d\n", f(1,1,1,2));
printf("%d\n", f(1,2,3,3));
return 0;
}
题目解析
运用递归的方法可以很快得到解。
C++代码
#include<iostream>
using namespace std;
int f(int a, int b, int c, int n)
{
if(a<0 || b<0 || c<0) return 0;
if(n==0) return 1;
return f(a-1,b,c,n-1)+f(a,b-1,c,n-1)+f(a,b,c-1,n-1);//f(a-1,b,c,n-1)表示串中有添加一个a后,所以递归字符串长度为n-1
}
int main()
{
printf("%d\n", f(1,1,1,2));
printf("%d\n", f(1,2,3,3));
return 0;
}