| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 711 人关注过本帖
标题:[求助]递归算法用非递归完成!!
只看楼主 加入收藏
xinrui0754
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-3-30
收藏
 问题点数:0 回复次数:1 
[求助]递归算法用非递归完成!!

各位高手帮我看看哪里有错误啊?我编译了没错,但是运行了之后就出错了,不知道什么原因啊?
题目是用非递归算法计算f(m,n),当m*n=0时,f(m,n)=m+n+1; 当m*n!=0时,f(m,n)=f(m-1,f(m,n-1));
下面是我编的程序:
#include<iostream>
using namespace std;

class Node
{ public: int mval,nval;
Node *next;
};


class Stack
{ private: Node *top;
public: void init(Stack &s,int m,int n){ s.top->next=NULL;s.top->mval=m;s.top->nval=n;}
// void init(int m,int n){top->next=NULL;top->mval=m;top->nval=n;}
/*void clear()
{ while(top->next!=NULL)
{ Node *p=top;
top=top->next;
delete p;
}
}*/
void push(Stack &s,int m,int n)
{ Node *p=new Node;
p->mval=m;
p->nval=n;
p->next=s.top;
s.top=p;
}
void pop(Stack &s){Node *p=s.top;s.top=p->next;delete p;}

/*void pop(Stack &s)
{ Node *p=s.top;
s.top=s.top->next;
delete p;

}*/
//int f(Stack &s,int m,int n);
int f(Stack &s ,int m,int n);
};
int Stack::f(Stack &s,int m,int n)
{
init(s,2,1);
//push(s,m,n);
do{ while(top->mval!=0)
{
{ while(s.top->nval!=0)
push(s,m,n-1);
}
if(s.top->next!=NULL && s.top->mval!=0 && s.top->nval==0)
{ s.top->next->mval=s.top->mval-1;
s.top->next->nval=s.top->mval+s.top->nval+1;
//s.top=s.top->next;
pop(s);
}
}
while(s.top->mval==0)
{ s.top->next->mval=s.top->mval;
s.top->next->nval=s.top->mval+s.top->nval+1;
pop(s);
}
} while(s.top->next!=NULL);
return s.top->mval+s.top->nval;
}


void main()
{ Stack s;
int m,n;
cout<<"输入m的值:";
cin>>m;
cout<<"输入n的值:";
cin>>n;
cout<<"f(m,n)="<<s.f(s,m,n)<<endl;
}

ufP63qgr.txt (1.62 KB) [求助]递归算法用非递归完成!!


搜索更多相关主题的帖子: 递归 算法 
2006-04-04 17:21
xinrui0754
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-3-30
收藏
得分:0 

刚才有一个地方写错了,这个才是原来的程序
#include<iostream>
using namespace std;

class Node

{ public: int mval,nval;
Node *next;
};


class Stack
{ private: Node *top;
public: void init(Stack &s,int m,int n){ s.top->next=NULL;s.top->mval=m;s.top->nval=n;}
// void init(int m,int n){top->next=NULL;top->mval=m;top->nval=n;}
/*void clear()
{ while(top->next!=NULL)
{ Node *p=top;
top=top->next;
delete p;
}
}*/
void push(Stack &s,int m,int n)
{ Node *p=new Node;
p->mval=m;
p->nval=n;
p->next=s.top;
s.top=p;
}
void pop(Stack &s){Node *p=s.top;s.top=p->next;delete p;}

/*void pop(Stack &s)
{ Node *p=s.top;
s.top=s.top->next;
delete p;
}*/
//int f(Stack &s,int m,int n);
int f(Stack &s ,int m,int n);
};
int Stack::f(Stack &s,int m,int n)
{
init(s,0,0);
push(s,m,n);
do{ while(top->mval!=0)
{
{ while(s.top->nval!=0)
push(s,m,n-1);
}
if(s.top->next!=NULL && s.top->mval!=0 && s.top->nval==0)
{ s.top->next->mval=s.top->mval-1;
s.top->next->nval=s.top->mval+s.top->nval+1;
//s.top=s.top->next;
pop(s);
}
}
while(s.top->mval==0)
{ s.top->next->mval=s.top->mval;
s.top->next->nval=s.top->mval+s.top->nval+1;
pop(s);
}
} while(s.top->next!=NULL);
return s.top->mval+s.top->nval;
}


void main()
{ Stack s;
int m,n;
cout<<"输入m的值:";
cin>>m;
cout<<"输入n的值:";
cin>>n;
cout<<"f(m,n)="<<s.f(s,m,n)<<endl;
}

2006-04-04 17:22
快速回复:[求助]递归算法用非递归完成!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032571 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved