数据结构(C语言版) 栈和队列 算法设计Demo9
Posted Aiden (winner)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(C语言版) 栈和队列 算法设计Demo9相关的知识,希望对你有一定的参考价值。
已知Ackermann函数定义如下:
① 写出计算Ack(m,n)的递归算法,并根据此算法给出出Ack(2,1)的计算过程。
② 写出计算Ack(m,n)的非递归算法。
[算法描述]
int Ack(int m,n)
if(m==0)
return(n+1);
else if(m!=0&&n==0)
return(Ack(m-1,1));
else return(Ack(m-1,Ack(m,m-1)));
//算法结束
// ① Ack(2,1)的计算过程
Ack(2,1)= Ack(1,Ack(2,0)) //因m<>0,n<>0而得
= Ack(1,Ack(1,1)) //因m<>0,n=0而得
= Ack(1,Ack(0,Ack(1,0))) // 因m<>0,n<>0而得
= Ack(1,Ack(0,Ack(0,1))) // 因m<>0,n=0而得
= Ack(1,Ack(0,2)) // 因m=0而得
= Ack(1,3) // 因m=0而得
= Ack(0,Ack(1,2)) //因m<>0,n<>0而得
= Ack(0,Ack(0,Ack(1,1))) //因m<>0,n<>0而得
= Ack(0,Ack(0,Ack(0,Ack(1,0)))) //因m<>0,n<>0而得
= Ack(0,Ack(0,Ack(0,Ack(0,1)))) //因m<>0,n=0而得
= Ack(0,Ack(0,Ack(0,2))) //因m=0而得
= Ack(0,Ack(0,3)) //因m=0而得
= Ack(0,4) //因n=0而得
=5 //因n=0而得
// ②
int Ackerman(int m, int n)
int akm[M][N];
int i,j;
for(j=0;j<N;j++)
akm[0][j]=j+1;
for(i=1;i<m;i++)
akm[i][0]=akm[i-1][1];
for(j=1;j<N;j++)
akm[i][j]=akm[i-1][akm[i][j-1]];
return(akm[m][n]);
//算法结束
以上是关于数据结构(C语言版) 栈和队列 算法设计Demo9的主要内容,如果未能解决你的问题,请参考以下文章