1、 实验内容 递归
求n的二次方各项的系数。
2、 程序设计
代码如下: #include\
void coeff(int a[],int n) { if(n==1) { a[1]=1;a[2]=1; } else { coeff(a,n-1); a[n+1]=1; for(int i=n;i>=2;i=i-1) a[i]=a[i]+a[i-1]; a[1]=1; } }
void main() { int a[100],i,n; printf(\输入n的值:\ scanf(\ coeff(a,n); for(i=1;i<=n+1;i++) printf(\ printf(\}
3、 运行结果
1、 实验内容
写出计算ackerman函数ack(m,n)的递归计算函数。
2、 程序设计
代码如下:
#include \int ack(int m,int n) { if(m==0) return n+1; else if(n==0) return ack(m-1,1); else return ack(m-1,ack(m,m-1)); }
void main() { int m,n,z; printf(\ scanf(\ if(m<0 && n<0) printf(\ else z=ack(m,n); printf(\}
3、 运行结果
第四章
例15 求数列的最大子段和
给定n个元素的整数列(可能为负整数)a1,a2,…..,an。求形如: ai,ai+1,……aj i,j=1,…..,n,i<=j
的子段,使其和为最大。当所有整数均为负整数时定义其最大子段和为0. 程序:
#include
int maxsum2(int a[],int left,int right) {
int center,i,left_sum,right_sum,s1,s2,lefts,rights; if(left==right) if(a[left]>0)
return a[left]; else
return 0; else {
center=(left+right)/2;
left_sum=maxsum2(a,left,center); right_sum=maxsum2(a,center+1,right); s1=0; lefts=0;
for(i=center;i>=left;i--) {
lefts=lefts+a[i]; if(lefts>s1) s1=lefts; } s2=0; rights=0;
for(i=center+1;i<=right;i++) {
rights=rights+a[i]; if(rights>s2) s2=rights; }
if((s1+s2 int maxsum1(int a[],int n) { return(maxsum2(a,1,n)); } void main() { int a[100],n; printf(\ scanf(\ printf(\ for(int i=1;i<=n;i++) scanf(\ printf(\ printf(\} 运行结果: