在一个递归函数中,设置静态变量前,需要先isset吗?

<?php
function test($array)
{
    static $data = [];

    //if (!isset($data)) {
    //    static $data = [];
    //}

    foreach ($array as $item) {
        if (is_array($item)) {
            test($item);
        } else {
            $data[] = $item;
        }
    }
}

$arr = [[1,2,3],3,4,[5,6]];
test($arr);

通常我是不会isset的,按照我的理解static不会定义第二遍

php
让PHP再次伟大
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
jcc123
最佳答案

不需要,静态变量在递归中。可以作为缓存使用。 比如 求斐波那契数列,只会计算一次

function fib($n){
    static $a = [];
    if ($n == 0) {
        return  0;
    }
    if ($n == 1) {
        return  1;
    }
    if ($n >= 2) {
        // 存个缓存
        if (isset($a[$n])){
            return $a[$n];
        }
        return $a[$n] = fib($n - 1)+fib($n - 2);
    }
}
echo fib(10);
echo fib(10); // 调用缓存
1年前 评论
讨论数量: 1
jcc123

不需要,静态变量在递归中。可以作为缓存使用。 比如 求斐波那契数列,只会计算一次

function fib($n){
    static $a = [];
    if ($n == 0) {
        return  0;
    }
    if ($n == 1) {
        return  1;
    }
    if ($n >= 2) {
        // 存个缓存
        if (isset($a[$n])){
            return $a[$n];
        }
        return $a[$n] = fib($n - 1)+fib($n - 2);
    }
}
echo fib(10);
echo fib(10); // 调用缓存
1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!