请教一个递归问题的非递归求解方法!(22分,我全部的家当了) sorry, I cannot understand your code.what is n+1?is it n=1?where is the return statement? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 递归算法到是好写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)); }}至于非低归算法,让我再想想 :) 我上面给出的是一个数学公式,是要求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)) clack(千里快哉风) 谢谢你了,是啊,递归算法到是好些,用栈实现的非递归算法,好象不太好些,我没有思路 akm(m,n)= m + n + 1 相应算法如下#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;} 如何在CDocument::OnSaveDocument之前更改CFileDialog的当前目录 _llseek()和fseek90的区别 请问好何在对话框上的编辑框中绘图呀? 奇怪,为什么CListCtr的LVN_ITEMCHANGED会发两次 IDL问题 关于内存泄露 请问能在VC中编译普通TURBO C格式的C语言程序吗? 有谁懂得UML和SourceSafe、ClearCase? 如何改变树的图标 VC++6.0 使用Openssl问题 受尽挫折的人进来 怎么让被picture控件盖住的button控件能在程序运行时显示出来?
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));
}
}
至于非低归算法,让我再想想 :)
当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))
用栈实现的非递归算法,好象不太好些,我没有思路