ackerman递归

定义:

               n+1        n=0

A(m,n)={A(m-1,1) m=0

               A(m-1,A(m,n-1)) n>0,m>0

 

 1 #include <iostream>
 2 #include<iomanip>
 3 using namespace std;
 4 int ack(int m,int n)
 5 {
 6     if(m==0)
 7         return n+1;
 8     else if(n==0)
 9         return ack(m-1,1);
10     else
11         return ack(m-1,ack(m,n-1));
12 }
13 int main()
14 {
15     for(int i=0;i<4;i++)
16     for(int j=0;j<10;j++){
17         cout<<setw(5)<<ack(i,j)<<' ';
18         if((j+1)%10==0)cout<<endl;
19     }
20 
21 }
View Code

第一行:A(0,0)-A(0,9)

第二行:A(1,0)-A(1,9)

第三行:A(2,0)-A(2,9)

第四行:A(3,0)-A(3,9)

A(0,n)=n+1

A(1,n)=A(0,A(1,n-1)=A(1,n-1)+1=...=A(1,0)+n=A(0,1)+n=n+2

A(2,n)=A(1,A(2,n-1))=A(2,n-1)+2=A(1,A(2,n-2))+2=A(2,n-2)+2+2=...=A(2,0)+2n=A(1,1)+2n=2n+3

A(3,n)=A(2,A(3,n-1))=2A(3,n-1)+3即xn=2xn-1+3 化为 xn+3=2(xn-1+3) 用等比数列可求得xn=x02n A(3,0)+3=A(2,1)+3=8 即x0=8所以:

A(3,n)=8*2n-3=2n+3-3

 

感觉递归还是挺难的

 

 

posted @ 2014-03-08 14:54  george_cw  阅读(278)  评论(0编辑  收藏  举报