从汉诺塔上写递归

Posted lt-com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从汉诺塔上写递归相关的知识,希望对你有一定的参考价值。

 技术分享图片

需求: 求出每一级的数量,但是父级+子级的所有数量。

比如 第一级本身数量为1 而子级是2 ,那么相加就是3,但是2级还有3级,就需要再加上3级。依次类推到最后一级数量之和就是这个分类的总数量。

实现的思路:

1:我们需要找到自身的数量.

2.1:我们找到自身的下一级所有数量相加 ,返回数量.

2.2:子级再去调用方法1,这样最后累加。

 

代码:

class Test
{
    public static function  getAllData()
    {
        echo ‘<pre>‘;
        $data=[];
        self::_getData($data,‘1‘);
        var_dump($data);exit;
    }

    //获取自身+子级
    private static function _getData(&$data,$id)
    {
        $item = self::_getDataById($id);
        if ($item==null) {
           return 0;
        }
        array_push($data,$item);
        $tem_key = count($data)-1;
        $child_amount = 0;
        $child_item=  self::_getChildrenData($id);
        foreach ($child_item as $item)
        {
            $amount = self::_getData($data,$item[‘id‘]);
            $child_amount +=$amount;
        }
        $data[$tem_key][‘amount‘]+=$child_amount;
        return  $data[$tem_key][‘amount‘];
    }

    //获取自身
    private static function _getDataById($id)
    {
        $sql=‘SELECT * FROM  category WHERE id=:id‘;
        $cmd = Yii::$app->db->createCommand($sql);
        $cmd->bindValue(‘:id‘, $id);
        return $cmd->queryOne();
    }

    //获取子级
    private static function _getChildrenData($id)
    {
        $sql=‘SELECT * FROM  category WHERE parent_id=:id‘;
        $cmd = Yii::$app->db->createCommand($sql);
        $cmd->bindValue(‘:id‘, $id);
        return  $cmd->queryAll();
    }

}

 

 部分结构:

技术分享图片

 

以上是关于从汉诺塔上写递归的主要内容,如果未能解决你的问题,请参考以下文章

函数递归——汉诺塔经典题型

汉诺塔

从"汉诺塔"经典递归到JS递归函数

汉诺塔--》(递归函数)

JavaScript递归函数解“汉诺塔”

poj1958-汉诺四塔问题(三种方法)