递归函数中有for循环调用递归,怎么优化,或改成非递归?有什么方法?

类似下面的递归函数如何改成非递归?C#问题。///////////////////////////////////////////////////////////////... 类似下面的递归函数如何改成非递归?C#问题。
///////////////////////////////////////////////////////////////////////////
List<Object> listObj = XXXXX;//其他处理已经给listObj初期化和赋值。
private void create(Object obj) {
foreach(Object tmpObj in listObj) {
if(条件1 == true) {
tmpObj设置值;
create(tmpObj);
}
}
}
//////////////////////////////////////////////////////////////////////////
现在这个递归处理效率很慢,有没有大神能指点迷津,怎么能提高效率?改成非递归。
本人试过堆栈队列,效率不行。
展开
 我来答
zhangsonglin_c
高粉答主

2019-01-23 · 醉心答题,欢迎关注
知道大有可为答主
回答量:3.7万
采纳率:83%
帮助的人:7064万
展开全部
可以将循环也变成递归(二参数递归)。
递归,一般可以转化成循环。怎么转化,得看具体问题。
追答
不明白你的程序干什么,条件1是什么,本来条件1不满足,怎么重新create一下就满足了?obj已经在list内,干嘛还要create?
从程序看,有意义的一句,只是设置值,循环即可。
这个程序的慢,其实是陷入死循环了。
CHENGWENGJI
2019-01-23 · TA获得超过412个赞
知道小有建树答主
回答量:667
采纳率:66%
帮助的人:296万
展开全部
这样看不太出来,create函数中是否对listObj做了修改呢
追问
对listObj进行修改了,应该算是引用传递
追答
单从你贴出来的这段代码来看,确实不好做什么有用的更改,比如不知道传递的参数如何使用的,不知道对listObj做了什么样的修改,你可以贴更详细的代码出来看看,不然只能建议你改成队列或者堆栈吧,应该会好一点,大多数情况下也只是一点,如果数据量大就有改的必要,小就算了.

你更应该从算法的角度去优化.
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式