sorry, I cannot understand your code.
what is n+1?is it n=1?
where is the return statement?

解决方案 »

  1.   

    递归算法到是好写
    int akm(int m,n)
    {
    if (m == 0)
    return n+1;
    else
    {
    if (n == 0)
    return akm(m-1,1)
    else
    return akm(m-1,akm(m,n-1));
    }
    }
    至于非低归算法,让我再想想 :)
      

  2.   

    我上面给出的是一个数学公式,是要求akm(m,n),初始值当然是m!=0,n!=0当m=0时           akm(m,n)=n+1                    
    当m!=0,n=0时      akm(m,n)=akm(m-1,1)              
    当m!=0,n!=0时     akm(m,n)=akm(m-1,akm(m,n-1))                        
      

  3.   

    clack(千里快哉风) 谢谢你了,是啊,递归算法到是好些,
    用栈实现的非递归算法,好象不太好些,我没有思路
      

  4.   

    akm(m,n)= m + n + 1
      

  5.   

    相应算法如下#include <iostream.h>#include “stack.h”#define maxSize 3500;unsigned akm ( unsigned m, unsigned n ) {struct node { unsigned vm, vn; }stack<node> st ( maxSize ); node w; unsigned v;w.vm = m; w.vn = n; st.Push (w);do {while ( st.GetTop( ).vm > 0 ) { //计算akm(m-1, akm(m, n-1) )while ( st.GetTop( ).vn > 0 ) //计算akm(m, n-1), 直到akm(m, 0){ w.vn--; st.Push( w ); }w = st.GetTop( ); st.Pop( ); //计算akm(m-1, 1)w.vm--; w.vn = 1; st.Push( w );} //直到akm( 0, akm( 1, * ) )w = st.GetTop(); st.Pop( ); v = w.vn++; //计算v = akm( 1, * )+1if ( st.IsEmpty( ) == 0 ) //如果栈不空, 改栈顶为( m-1, v ){ w = st.GetTop(); st.Pop( ); w.vm--; w.vn = v; st.Push( w ); }} while ( st.IsEmpty( ) == 0 );return v;}