如何终止递归???不是返回!!!!

hua_zhixing_ 2009-05-15 04:30:30
当满足条件时,就结束递归,不再完成递归,且取此时的值,而不是返回。
怎么做?或者可以这样做吗?
...全文
5369 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjjdebug 2009-05-17
  • 打赏
  • 举报
回复
需求描述不清楚。
当满足条件,不需要递归时,就是递归终止,就是正常返回。
如果你想知道返回的原因,可以通过全局变量,也可以通过层层调用传递的返回参数。
flora186 2009-05-17
  • 打赏
  • 举报
回复
UP
aaaa3105563 2009-05-17
  • 打赏
  • 举报
回复
UP
hemiya 2009-05-17
  • 打赏
  • 举报
回复
楼主是想节约返回值产生的临时变量所消耗的时间吧?
4楼的思路挺好,不过这种方法思路不明确,毕竟你要的结果不是真正的“异常”。
还是逐步返回比较好。
你也可以在递归函数外边用个全局变量存储返回值,递归函数声明为void.

int aaa = 0;

void di_gui(int value)
{
//...
if (value <= 0)
{
return;
}
else
{
aaa += value;
value--;
di_gui(value);
}
}

void call_di_gui()
{
di_gui(100);
}
_Kwekwe_ 2009-05-17
  • 打赏
  • 举报
回复
如果不是返回,那么栈怎么解决涅?
如果要出栈,干嘛不用返回涅?
iamyuguo 2009-05-16
  • 打赏
  • 举报
回复
throw & catch 是正解, setjmp 和 longjmp 其实是一样的;
另外可以考虑一下任务管理器 :)
pathuang68 2009-05-15
  • 打赏
  • 举报
回复
题目有点怪,LZ能说说在什么情况需要这样处理么?
Jalien 2009-05-15
  • 打赏
  • 举报
回复
貌似只有异常机制可以做到~
当满足一定条件时抛出它,然后在外层捕获~
超gogo 2009-05-15
  • 打赏
  • 举报
回复
在递归的最后 应该是一个终止条件
太乙 2009-05-15
  • 打赏
  • 举报
回复
http://www.chinaitpower.com/2005September/2005-09-13/205063.html
太乙 2009-05-15
  • 打赏
  • 举报
回复
setjmp

然后longjmp

liao05050075 2009-05-15
  • 打赏
  • 举报
回复 1
抛异常是个好想法。
但一般我们不这么做,只是设置一个标志,然后层层返回。
lpf000 2009-05-15
  • 打赏
  • 举报
回复
return;
退出函数
liliangbao 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 erwin1984 的回复:]
异常是一种方式,

如下:
try
{
RecusionFunction();
}
catch( int nRet )
{
}

RecusionFunction()
{
//在需要结束的地方:可以throw任何对象或指针。
int nRet = 0;
throw nRet;
}
[/Quote]
思想经典~
JoyerHuang_悦 2009-05-15
  • 打赏
  • 举报
回复
我想你要的应该是longjmp吧。。
这个长跳转快是快,但是和C++的RAII配合得不好。。

chenxu_ustc 2009-05-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 erwin1984 的回复:]
异常是一种方式,

如下:
try
{
    RecusionFunction();
}
catch( int nRet )
{
}

RecusionFunction()
{
    //在需要结束的地方:可以throw任何对象或指针。
    int nRet = 0;
    throw nRet;
}
[/Quote]

正解 按楼主的需求 ,只能如此了
Dinelgua 2009-05-15
  • 打赏
  • 举报
回复
可以在项终止时 return 一个flag 遇到此flag 则每一层都return这个flag
maosher 2009-05-15
  • 打赏
  • 举报
回复
??
break?
erwin1984 2009-05-15
  • 打赏
  • 举报
回复
除非特出情况,否则不建议使用throw 的方式,返回值的方式好一些。
erwin1984 2009-05-15
  • 打赏
  • 举报
回复
异常是一种方式,

如下:
try
{
RecusionFunction();
}
catch( int nRet )
{
}

RecusionFunction()
{
//在需要结束的地方:可以throw任何对象或指针。
int nRet = 0;
throw nRet;
}
加载更多回复(3)

65,179

社区成员

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

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