把递归算法变成不用递归的方式?

小囧 发布于 2011/10/19 14:54
阅读 668
收藏 2
PHP
function amkdir($dir)
{
    if(!is_dir(dirname($dir)))
    {
        amkdir(dirname($dir));
    }
    mkdir($dir);
}

不用递归怎么实现?

是不是每个递归方式 都可以不用递归代替?

加载中
0
Grrrr
Grrrr

递归其实就是用栈实现的.把上一个方法的返回值和参数压栈.

消除递归一般的方法是用栈来实现.再套用switch语句来判断对应逻辑.

楼主可以参考data_structures_and_algorithms_in_java书中294页的一个例子.讲的很不错.

http://uwu.weebly.com/uploads/4/0/6/3/4063810/data_structures_and_algorithms_in_java.pdf

0
小囧
小囧
function amkdir($dir)
{
    $array = array();
    while(!is_dir($dir))
    {
        array_push($array,$dir);
        $dir = dirname($dir);
       
    }
   
    while($array)
    {
        $dir = array_pop($array);
        mkdir($dir);
    }
}

amkdir('./1/2/3/');


 

0
Yisen
Yisen

任何能用递归解决的问题也能用迭代方法解决。递归方法优于迭代方法之处在于能更自然地反映问题,使程序更容易理解和调试。

在要求性能的情况下不要用递归方法。递归调用既花时间又占用更多的内存。

小囧
小囧
谢谢~ 受教匪浅哈~ 以前一直都用递归 但是有时候又会改进下 把递归换为循环解决,今天就突然冒出了个想法,结果实验证明是可行的。。。半路出家的,哎~ 没文化,真可怕~
返回顶部
顶部