美文网首页
笛卡尔积与斐波那契数列-PHP

笛卡尔积与斐波那契数列-PHP

作者: 与子笑 | 来源:发表于2018-05-20 10:18 被阅读0次

php  @amazeUI  2017-01-20 01:58:13

先来说说什么叫斐波那契数列,再谈谈如何实现它。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

      本文链接:https://www.haomeiwen.com/subject/lgbzdftx.html