ints(intn,intk)
{
if((n==k)||(k==1))return1;
else
returns(n-1,k-1)+k*s(n-1,k);
}
intmain()
{
printf("%d\n",s(7,5));
system("pause");
return0;
}
输出结果:
[解析]程序很短很简单,但是如果我们用类似上例的方法来模拟展开该递归的执行调用过程,会碰到前所未有的困难。原因很简单,递归调用的次数太多了。碰到这种情况时,我们可以从递归的边界出发,进行递推求解。具体求解过程如下:
1、边界赋值:s[n,n]=1;s[n,1]=1
2、递推求解过程:
S[3,2]=s[2,1]+2*s[2,2]=3
S[4,2]=s[3,1]+2*s[3,2]=7;s[4,3]=s[3,2]+3*s[3,3]=6
S[5,3]=s[4,2]+3*s[4,3]=25;s[5,4]=s[4,3]+4*s[4,4]=10
s[6,4]=s[5,3]+4*s[5,4]=65;s[6,5]=s[5,4]+5*s[5,5]=15
S[7,5]=s[6,4]+5*s[6,5]=65+5*15=140整个递推过程,可记录如下表格:
k
n
1
2
3
4
5
6
7111111111371625110651151402345
也即本例输出结果为:140
值得注意的是,我们只要求出表格中的数据即可,其它空白的,无需求解。为了节省时间,避免不必要的人为错误,所做的运算越少越好。那么哪些是该算的、哪些是无需计算的,也即如何只进行有效计算呢?这问题,留给读者自己思考。
小结:字符(串)操作,除了要求选手要有扎实的语言基础并了解相关字符串知识点外,多数还体现了对选手细心、耐心及毅力品质的考核。题目一般不会引用高深的算法或理论,需要的就是“静心分析、耐心计算”。
而子程序的调用,考查的除了子程序调用本身的一些知识点外,多数还会揉合一些其它综合知识。比如,选例十一,其实就是第二类Stirling数。
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库阅读程序写结果之进阶篇(c语言版)(5)在线全文阅读。
相关推荐: