黄宽的blog

宁可十年不将军,不可一日不拱卒



笛卡尔积与斐波那契数列

先来说说什么叫斐波那契数列,再谈谈如何实现它。1,1,2,3,5.....,从第三个数开始,后面一个数字等于前两个数字之和,就是的了,越到后面越接近0.618,所以又称之为黄金分割数列。前几年有人炒作说啥某某超牛逼的大学生利用这玩意炒股,赚了多少多少钱,纯属骗钱的把戏,也有人张口闭口斐波那契数列,不懂的人哇塞好666啊,其实就很简单,小学生就能做出来,所以这玩意用php实现起来单纯只是为了玩,并且表示这些听起来越厉害的东西,只要愿意去理解他,不管互联网上给你灌溉多少名词和概念,其实经过多方求证和自己动手后,也就那么回事,换汤不换药。

public function fibonacci()
{
    $a = 1476;
    $b = array(1, 1);
    for ($e = 1; $e < $a; $e++) {
        $b[$e + 1] = $b[$e] + $b[$e - 1];
    }
    return $b;
}

上面就是斐波那契数列的php实现,没什么好说的。

下面写一个笛卡尔乘积的php实现。这个得说道说道,我算是翻阅了一些人的php实现,什么递归啊什么什么鬼的,这都啥玩意啊,让人没有看下去的欲望在此表示目前能在互联网上搜到的最好的php实现的笛卡尔乘积就在下方,写了一个类,做了验证。

class Descartes
{
    public $res = array();//返回结果

    public function index(array $arr)//入口
    {
        $arr = self::valiarray($arr);
        $countarr = count($arr);
        if ($countarr <=1) {
            $this->res = '传入参数有误';
        }else {
            self::all($arr);
        }
        return $this->res;
    }

    private function all($arr)
    {
        $result = array();
        $count = count($arr);
        for ($i = 0; $i < $count - 1; $i++) {
            if ($i == 0) {
                $result = $arr[$i];
            }
            $tmp = array();
            foreach ($result as $res) {
                foreach ($arr[$i + 1] as $set) {
                    $tmp[] = $res . $set;
                }
            }
            $result = $tmp;
        }
        $this->res = $result;
    }

    private function valiarray($arr)//检测传入数据是否合法
    {
        $arr = array_values($arr);
        foreach ($arr as $k => $v) {
            if (empty($arr[$k]) || !is_array($arr[$k])) {
                unset($arr[$k]);
                continue;
            }

            $v = array_values($v);
            foreach ($v as $vk => $c) {
                if (is_bool($c)) {
                    $arr[$k][$vk] = $c === false ? 'false' : 'true';
                    continue;
                }
                if (is_null($c)) {
                    $arr[$k][$vk] = 'null';
                    continue;
                }
                if (is_array($c)) {
                    $arr[$k][$vk] = 'array';
                    continue;
                }
                if (is_object($c)) {
                    $arr[$k][$vk] = 'object';
                    continue;
                }
                if ($c == '') {
                    unset($arr[$k][$vk]);
                    continue;
                }
                $arr[$k][$vk] = str_replace(' ', '', $c);
            }
        }
        return $arr;
    }
}

这个写法是最简单的。

 

  php

作者  :  黄宽

不耻最后,即使慢,驰而不息,纵会落后,纵令失败



About ME

about me

黄宽

我不想成为一个庸俗的人。十年百年后,当我们死去,质疑我们的人同样死去,后人看到的是裹足不前、原地打转的你,还是一直奔跑、走到远方的我?

友情链接