java的循环能不能直接转换成递归

2024-12-21 08:15:44
推荐回答(4个)
回答1:

看是什么情况但是需要一个结束递归的条件
比如:
int i=0;
int a(int i){
if(i==8){ 终结条件
return i;
}
i++;
return a(i);
}
调用方法 a(i);
这就是一个简单的递归,但是连续调用方法是很消耗的,所以递归一般不建议使用
一、函数调用需要使用内存中的栈来保存函数的数据以及访问链和控制链,如果数据是必须的,那么访问链和控制链等所占的内存则是额外的。
二、使用递归,会进行很深层次的调用函数,所以需要调用很多函数,需要建立许多的访问链和控制链,占用大量内存,而且调用时传递参数,申请空间,返回时恢复现场,都有时间的花销,所以递归效率低。
三、内存的栈当作一个容器,每次递归,函数都往容器中添加容量,当添到一定层次,容器满了,就溢出了,如果用递归,如果忘记了递归截至条件,你就可能进入了无穷递归,无穷递归必然会溢出,所以,不提倡递归

回答2:

递归解决方案看似代码简洁,但是不是好的设计方式,只有在不使用递归无法解决时,也就是只有递归才能做到解决问题时才使用,比如对未知目录(树)的迭代等操作,理论是如果使用循环能做的操作通常可以使用递归,但是实际是不会采用此方式的,原因如前所说,递归比较低效能......

回答3:

递归算法耗内存,耗时间,不建议使用

回答4:

递归可以遍历整棵树(或者当前枝干的所有下属节点),即使树的层数未知也能最终遍历出所有节点;
循环则只能遍历同一层的所有节点,如果下属节点的层数已知或只需要遍历有限层数的节点,那么通过多重循环也可以实现遍历多层节点的目的,但循环无法对层数未知的树结构进行遍历。