g***j 发帖数: 1275 | 1 请问,递归和非递归分别有什么优势和缺点,如何选择使用递归和非递归的方法?
另外,什么情况下,递归的方法比非递归的方法要高效呢?
什么是tail recursion? |
c**s 发帖数: 159 | 2 个人感觉 递归的优势只是代码简单,效率通常比非递归的要低。
因为递归要用到系统栈,所以递归效率低。
没感觉递归比非递归高效,只有递归用所谓备忘录方法(把已经算过的结果保存起来,
再算到这时可以直接返回)才能提高效率,但应该还是比循环的效率低吧。
尾递归不知道具体定义,感觉上就是在一层中自己只调用一次自己,这样可以方便转为
非递归。
【在 g***j 的大作中提到】 : 请问,递归和非递归分别有什么优势和缺点,如何选择使用递归和非递归的方法? : 另外,什么情况下,递归的方法比非递归的方法要高效呢? : 什么是tail recursion?
|
k****n 发帖数: 1334 | 3 尾递归是递归发生在function最后,确定可以转换为非递归
【在 g***j 的大作中提到】 : 请问,递归和非递归分别有什么优势和缺点,如何选择使用递归和非递归的方法? : 另外,什么情况下,递归的方法比非递归的方法要高效呢? : 什么是tail recursion?
|
a****l 发帖数: 8211 | 4 递归问题真的可以转化为非递归问题吗?我看到的几个使用非递归算法解决递归问题的
东西,其实最后还是要用一个自己做的栈来储存中间信息的,其实我觉得就是一个障眼
法,把原来程序段的栈变成数据段的栈,本质上还是没有解决递归问题的无限内存的根
本缺陷。
【在 g***j 的大作中提到】 : 请问,递归和非递归分别有什么优势和缺点,如何选择使用递归和非递归的方法? : 另外,什么情况下,递归的方法比非递归的方法要高效呢? : 什么是tail recursion?
|
b***m 发帖数: 5987 | 5 系统栈的开销比数据栈大很多,无论时间上还是空间上。
【在 a****l 的大作中提到】 : 递归问题真的可以转化为非递归问题吗?我看到的几个使用非递归算法解决递归问题的 : 东西,其实最后还是要用一个自己做的栈来储存中间信息的,其实我觉得就是一个障眼 : 法,把原来程序段的栈变成数据段的栈,本质上还是没有解决递归问题的无限内存的根 : 本缺陷。
|