算法设计与分析课后习题

loading 分享 2026-9-21 下载文档

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(\}

运行结果:


算法设计与分析课后习题.doc 将本文的Word文档下载到电脑
搜索更多关于: 算法设计与分析课后习题 的文档
相关推荐
相关阅读