美文网首页程序员
递归 尾递归 迭代 回调

递归 尾递归 迭代 回调

作者: 84c3b8b5b9f8 | 来源:发表于2017-11-29 21:54 被阅读0次
小知识点
  • 函数式编程有一个概念,叫做柯里化(currying),意思是将多参数的函数转换成单参数的形式

  • 如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的.当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归

例子
// 递归
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(5);
echo Add2(5);
echo Add3(5);
echo Add4('AddFunc', [100000]);
相关阅读

相关文章

  • 递归 尾递归 迭代 回调

    小知识点 函数式编程有一个概念,叫做柯里化(currying),意思是将多参数的函数转换成单参数的形式 如果一个函...

  • Kotlin语言(九):特性

    1、尾递归优化 尾递归:函数在调用自己之后没有再执行其他任何操作就是尾递归 尾递归优化的原理就是将递归转换成迭代,...

  • 递归调用优化

    尾递归优化 函数调用自身,称为递归。如果尾调用自身,就称为尾递归。 递归非常耗费内存,因为需要同时保存成千上百个调...

  • Python基础知识详解

    函数可变参数 函数关键字参数 命名关键字参数 递归函数 尾递归函数优化 切片 迭代 列表迭代:字典迭代: 在这里小...

  • 迭代与递归(基础版)

    问题: 1.迭代 2.递归 通过实验可知,迭代运行速度比递归要快 用递归实现阶乘运算 迭代和递归的区别 迭代与递归...

  • 递归、回调

    递归函数:在函数的内部调用自己,递归函数应该给出口否则就会一直执行 若函数不给出口 递归的小应用 回调函数:把一个...

  • 递归&尾递归

    调用栈的特点,先进后出, FILO, 场景还原。 递归 有栈溢出的可能 stack overflow 尾递归 编译...

  • 递归和迭代的区别?

    递归和迭代的区别? 时间:20170225 递归:】】】】】】】】】...】】】】】】】】】】】】】】】】】】】】...

  • 迭代和递归的区别

    1) 递归中一定有迭代,但是迭代中不一定有递归,大部分可以相互转换。 2) 能用迭代的不用递归,递归调用函数,浪费...

  • C++ 递归算法

    递归算法,尾递归算法求阶乘!

网友评论

    本文标题:递归 尾递归 迭代 回调

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