求1到N的和

作者:超级管理员 更新时间:2017-10-31 17:59:14 来源:未知 点击:15642
// 递归function Add($num){    switch ($num) {        case 1:            return $num;        default:  

// 递归
function Add($num)
{
    switch ($num) {
        case 1:
            return $num;
        default:
            return $num + Add($num - 1);
    }
}

//尾递归
function Add2($num, $result = 0)
{
    switch ($num) {
        case 0:
            return $result;
        default:
            return Add2($num - 1, $result + $num);
    }
}

//迭代
function Add3($num)
{
    $result = 0;
    while ($num != 0) {
        $result += $num;
        $num--;
    }
    return $result;
}

//回调
function AddFunc($num, $result = 0)
{
    if ($num == 0) {
        return $result;
    }
    return function () use ($num, $result) {
        return AddFunc($num - 1, $result + $num);
    };
}

function Add4($callback, $num)
{
    $result = call_user_func_array($callback, $num);
    while (is_callable($result)) {
        $result = $result();
    }
    return $result;
}

echo Add(n);
echo Add2(n);
echo Add3(n);
echo Add4('AddFunc', [n]);

请问哪个性能比较好?第四种方法名称是叫回调吗?
-------------------------------
最快是function add(n){retrun n(n+1)/2}
-------------------------------
吃力的环节越少、消耗的内存越少,效率越高
显然是迭代效率最高
-------------------------------
为什么回掉我看不懂呢?
-------------------------------
return function () use ($num, $result) {
        return AddFunc($num - 1, $result + $num);
    };
-------------------------------
追求性能的话
function add($n) {
    return  ($n+1)*$n/2;
}
这样比较好吧
-------------------------------
array_sum(range(1,100))
-------------------------------
路过 学习了。
-------------------------------

推荐阅读

热门内容

curl无法获取数据,浏览器正常

curl 无法获取数据 ,报错:Empt...

phpexcel读取模版并写入导出

如图,6~16行,22行,不固定行数,没...

微信公众号网页的服务器端php代码不能正

微信公众号网页的服务器端php代码不能正...

PHP好讨厌的弱类型:在为空(null,

本帖最后由szuzsq于2017-08-...

请输入正确的email,表达式是否有错?

这个是mvmmall\templates...

在 Laravel 中 “规范” 的开发

Laravel简介Laravel是一套简...

phpStudy配置多站点多域名方法及遇

此文不太适合一点不懂多站点多域名的。适合...

phpstudy的php版本自由修改的方

网上有着许多的网站集成搭建软件,比较出名...

PHP 对redis订阅的问题

有这么一个需求,客户下单,下单后把订单发...

我这里有三个分类,每个分类上面有相对应的

我这里有三个分类,每个分类上面有相对应的...

最新内容

swing 判断单选框问题

    鼓动鼓动 swing  用的 windowbuilder 来进行设计的,...

关于java客户端与mqtt服务器用证书连接的问题

在网上找了很多例子,也实现了用java客户端通过证书连接mqtt服务器,但是有疑...

想了好久,还是不知道在哪出问题了,驱动包也重新下载了好几次,用户密码没问题

前台错误:type Exception reportmessage An exc...

GlassFish5部署应用报错,求大神教育

GlassFish5部署应用报错:Error occurred during d...

关于java多线程的一个问题

做一个多线程的题目实现*g*g*g*g*g*g.......实现其实不难,不过中...

萌新小白学习遇到问题,求各位大佬帮忙看一下哪里出错了?

这个是题目package edu.exam;import java.util.S...

最近学习spring aop 遇到的小白问题,求解答!!

package com.dao;import org.springframewo...

Java代码生成的随机数如果数据库的主键不能对应

建了一张表,查询到了所有题目的数量,然后根据题数随机生成你输入的几个随机数:(i...

web项目在MyEclipse部署正常,打成War包部署到外部Tomcat报空指针

如题,新人小白一个,新网大家帮帮忙用myeclipse启用外部Tomcat调试也...

IDEA里无法创建命名为build的目录?

IDEA里,无法创建命名为build的目录。提示为ignored name,无法...

魅红女性手机微博上线 魅蓝有女朋友了?

    中关村在线消息:今天上午,一个名为“魅红女性手机”的微博账号悄然上线,从...

使用spring+spring MVC + hibernate 实现不同数据库类型(sql server & orcale)切换获取数据

最近按照公司要求  搭个SSH框架   要动态切换获取数据库  网上百度了很多教...

求1到N的和

// 递归function Add($num){    switch ($num...

魅蓝打脸!未发售Note6绿色版高价转卖

    中关村在线消息:日前,有贴吧有网友晒出了他购买的海贼王典藏版的魅蓝Not...

过滤器里面可以拿到session,但是从session里面取出的值为空

本帖最后由zhouhai6833于2017-10-2710:54:55编辑用的s...

Maven的no such method错误

 这个方法在spring jar包里找到了,那么是不是有冲突了?还有我的IDEA...

curl无法获取数据,浏览器正常

curl 无法获取数据 ,报错:Empty reply from serverc...

诺基亚东家HMD新人事任命 临时CEO转正

    中关村在线消息:今天,诺基亚的东家HMD宣布了新的人事任命:临时CEO弗...

升级使用tomcat8.5,jdk8以后出现的报错

信息: Error parsing HTTP request header No...

curl 无法获取数据 Empty reply from server

curlDataTest("http://zhannei.baidu.com/a...