堆栈

饭fan有引力 2010-10-12 08:10:01
下面是求一个函数的递归算法和利用栈的非递归算法,可是总是数字输的比较大,像5.6的时候就会报错,不太明白,请赐教

#include <iostream>
using namespace std;

int akm1(int m, int n)
{
if(m==0)
return n+1;
else
{
if(n==0)
return akm1(m-1, 1);
else
return akm1(m-1, akm1(m, n-1));
}
}

int akm2(int m, int n)
{
int temp;
if(m == 0)
return n + 1;
if(n == 0)
return akm2(m - 1, 1);
temp = akm2(m, n-1);
return akm2(m - 1, temp);
}


void main()
{
int m, n;
cout << "Input two numbers for calculate : ";
cin >> m >> n;
cout << "The recurrent result is " << akm1(m, n) << endl;
cout << "The unrecurrent result is " << akm2(m, n) << endl;
system("pause");
}
...全文
181 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
luciferisnotsatan 2010-10-13
  • 打赏
  • 举报
回复
以前好像在本书上看过这例子,是用来说明输入规模与增量什么的,只要一个输8,一个输3,就能造成栈溢出了
Rainqin123 2010-10-13
  • 打赏
  • 举报
回复
int akm1(int m, int n)
{
if(m==0)
return n+1;
else
{
if(n==0)
return akm1(m-1, 1);
else
return akm1(m-1, akm1(m, n-1));
}
}



这个递归显然就有问题,(5,6)-(4,6)((4,5)-(3,5)((3,4)-(2,4)((2,3)-(1,3)((1,2)-(0,2)((0,3)...................永远使得n自加....
饭fan有引力 2010-10-13
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 libinfei8848 的回复:]
真的看不出来有利用栈的非递归的
[/Quote]

怎么样才算利用了栈的非递归,求解
libinfei8848 2010-10-12
  • 打赏
  • 举报
回复
真的看不出来有利用栈的非递归的
zero_cui 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dingshaofengbinbin 的回复:]
你这个有可能会无限的递归下去,肯定有问题的!!!
[/Quote]

m最终会等于0的,但是这个函数即时是akm1(5,6),我也估算不了函数被调用次数的数量级,想说这个函数的意义就是想挑战一下栈空间吧
shuiyu 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 iamduoluo 的回复:]
引用 6 楼 shuiyu 的回复:
akm1和akm2好像没有区别啊

递归算法和利用栈的非递归算法
不知道对不对
[/Quote]

怎么体现“利用栈的非递归算法”?

最大的不同就是这个:
akm1:
return akm1(m-1, akm1(m, n-1));
akm2:
temp = akm2(m, n-1);
return akm2(m - 1, temp);
但其实是一样的啊,多了个局部变量

其他就是有else没else的区别了
billlllyove 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shuiyu 的回复:]
akm1和akm2好像没有区别啊
[/Quote]

正解.

你只是把一个过程量叫个变量temp,然后继续之前的步骤.
不是所谓的非递归算法.
kkk 2010-10-12
  • 打赏
  • 举报
回复
貌似你的循环是个死循环,不知道是什么样的题目,需要这么多嵌套递归.

只有输入:(0,*)形式,还有(1,0)(2,0)(3,0)(4,0)有结果,其他都误解,好像.
饭fan有引力 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shuiyu 的回复:]
akm1和akm2好像没有区别啊
[/Quote]
递归算法和利用栈的非递归算法
不知道对不对
shuiyu 2010-10-12
  • 打赏
  • 举报
回复
akm1和akm2好像没有区别啊
饭fan有引力 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dingshaofengbinbin 的回复:]
你这个有可能会无限的递归下去,肯定有问题的!!!
[/Quote]
怎么讲
swl82560397pq 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dingshaofengbinbin 的回复:]
你这个有可能会无限的递归下去,肯定有问题的!!!
[/Quote]

确实啊。
dingshaofengbinbin 2010-10-12
  • 打赏
  • 举报
回复
你这个有可能会无限的递归下去,肯定有问题的!!!
饭fan有引力 2010-10-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ayw215 的回复:]
输入的数字大会出错是因为你的栈溢出了---递归的层次太多了撒
[/Quote]
可是栈会那么脆弱吗,只是输入一个数字5,一个6就溢出了?
ayw215 2010-10-12
  • 打赏
  • 举报
回复
输入的数字大会出错是因为你的栈溢出了---递归的层次太多了撒

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧