首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用循环编写递归

如何使用循环编写递归
EN

Stack Overflow用户
提问于 2018-12-22 17:41:49
回答 1查看 30关注 0票数 0

我想使用循环而不是递归函数来编写递归代码。因为执行递归需要花费太多的时间,即使是fails.This也在使用递归计算二叉树两端的用户。我想使用循环来实现这个任务。请提前帮我实现这个task.thanks,我将非常感谢你。

代码语言:javascript
运行
AI代码解释
复制
    function countActiveMembers($mid){
    if ($mid == null) {
        return 0;
    }
    $c = 0;

    include("conn.php");
    $query = $conn->prepare('SELECT leftm, rightm, package_choose FROM member WHERE user_id = ?');
    $query->bind_param('s', $mid);
    $query->execute();
    $query->bind_result($leftm, $rightm, $package_choosen);
    if ($query->fetch()) {
        $query->close();
        $conn->close();

        if ($package_choosen == 1) {
            $c = 0;
        } else {
            $c = 1;
        }

        if (isset($leftm) == false && isset($rightm) == false) {
            return $c;
        }


        if (isset($leftm)) {
            $c = $c + countActiveMembers($leftm);
        }
        if (isset($rightm)) {
            $c = $c + countActiveMembers($rightm);
        }
    } else {
        $query->close();
        $conn->close();
    }
    return $c;
}

    function countLeftActive($mid){
    if ($mid == null) {
        return 0;
    }
    $c = 0;
    include("conn.php");
    $query = $conn->prepare('SELECT leftm, rightm, package_choose FROM member WHERE user_id = ?');
    $query->bind_param('s', $mid);
    $query->execute();
    $query->bind_result($leftm, $rightm, $package_choosen);
    if ($query->fetch()) {
        $query->close();
        $conn->close();

        if (isset($leftm) == false && isset($rightm) == false) {
            return 0;
        }

        if (isset($leftm)) {
            $c = $c + countActiveMembers($leftm);
        }
    } else {
        $query->close();
        $conn->close();
    }
    return $c;
}
function countRightActive($mid){
    if ($mid == null) {
        return 0;
    }
    $c = 0;
    include("conn.php");
    $query = $conn->prepare('SELECT leftm, rightm, package_choose FROM member WHERE user_id = ?');
    $query->bind_param('s', $mid);
    $query->execute();
    $query->bind_result($leftm, $rightm, $package_choosen);
    if ($query->fetch()) {
        $query->close();
        $conn->close();
        if (isset($leftm) == false && isset($rightm) == false) {
            return 0;
        }

        if (isset($rightm)) {
            $c = $c + countActiveMembers($rightm);
        }
    } else {
        $query->close();
        $conn->close();
    }
    return $c;

}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-22 18:59:04

我希望您能理解这是很难测试的,所以希望您能充分理解它,以帮助您。

在任何系统中,最大的性能问题之一是文件/数据库访问,以及打开和关闭连接等总是一个缓慢的过程。此例程在启动时加载所有成员并传递数据,而不是继续使用数据库...

代码语言:javascript
运行
AI代码解释
复制
function countActiveMembers( $members, $mid){
    if ($mid == null) {
        return 0;
    }
    $c = 0;

   // Fetch the data from the $members list, using $mid as the index
   $leftm = $members[$mid]['leftm'];
   $rightm = $members[$mid]['rightm'];
   $package_choosen = $members[$mid]['package_choose'];
   if ($package_choosen == 1) {
        $c = 0;
    } else {
        $c = 1;
    }

    if (isset($leftm) == false && isset($rightm) == false) {
        return $c;
    }

    if (isset($leftm)) {
        $c = $c + countActiveMembers($members, $leftm);
    }
    if (isset($rightm)) {
        $c = $c + countActiveMembers($members, $rightm);
    }
    return $c;
}

function countLeftActive($members, $mid){
    if ($mid == null) {
        return 0;
    }
    $c = 0;
    $leftm = $members[$mid]['leftm'];
    $rightm = $members[$mid]['rightm'];

        if (isset($leftm) == false && isset($rightm) == false) {
            return 0;
        }

        if (isset($leftm)) {
            $c = $c + countActiveMembers($members, $leftm);
        }
    return $c;
}
function countRightActive($members, $mid){
    if ($mid == null) {
        return 0;
    }
    $c = 0;
    $leftm = $members[$mid]['leftm'];
    $rightm = $members[$mid]['rightm'];
    if (isset($leftm) == false && isset($rightm) == false) {
            return 0;
        }

        if (isset($rightm)) {
            $c = $c + countActiveMembers($members, $rightm);
        }
    return $c;

}

// Use your own database credentials
$conn = mysqli_connect("172.17.0.3", "root","a177fgvTRw", "test" );
$result = $conn->query('SELECT user_id, leftm, rightm, package_choose 
         FROM member');
$members = [];
// Read all the members in and index them by the user_id
while ($row = $result->fetch_assoc()) {
    $members[$row["user_id"]] = $row;
}

// Not entirely sure how you use it,but this shows passing the members into the start function
echo countActiveMembers($members, 1);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53897972

复制
相关文章
如何在Bash中编写循环?
人们想要学习Unix shell的一个常见原因是释放批处理的功能。如果要对许多文件执行某些操作,一种方法是构造一个遍历这些文件的命令来实现。在编程术语中,这称为执行控制,最常见的示例之一是for循环。
用户6543014
2020/02/21
2.5K0
for循环、递归、回溯
递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。
vv彭
2020/10/27
1.2K0
for循环、递归、回溯
循环?还是递归?
--------------------------------------------------------------------------
xcbeyond
2020/03/25
1.2K0
循环?还是递归?
递归改成循环_递归比循环效率高吗
递归容易造成栈溢出,在jdk1.5前虚拟机给每个栈桢的运行空间128kb,在1.5以后为1m的运行空间.递归是指先进后出,也就是说第一进栈的对象会最后一个出站,然后栈桢的空间只有1m,生产环境的数据需要递归的深度,一般情况下我们无法通过测试来进行模拟。所以对于递归的深度不可把控的情况下,是有栈溢出的风险。
全栈程序员站长
2022/09/30
6150
递归改成循环_递归比循环效率高吗
循环、递归与魔术(一)——递归与循环的数理逻辑
今天我们开启一段新的旅程,聊聊循环(circulation)和递归(recursion)背后的数理逻辑以及艺术应用。
magic2728
2019/10/28
1.4K0
循环、递归与魔术(一)——递归与循环的数理逻辑
59 - 递归生成器的编写和使用
请编写一个生成器,将任意多维的列表转换为一维列表 nestedList = [1, [2, 3, [4, 5]], [5, 3, [7, 1, [2, 0]], 7, [1, 7, 5, 3]]] print(nestedList) [1, [2, 3, [4, 5]], [5, 3, [7, 1, [2, 0]], 7, [1, 7, 5, 3]]] def enumList(nestedList): try: for subList in nestedList:
ruochen
2021/06/08
4520
59 - 递归生成器的编写和使用
算法--递归--走台阶问题(2种递归+递归改循环)
一个问题可以分解成若干子问题,且求解思路一样,当到一定的情况下有终止条件,这样的问题可以用递归方法求解
Michael阿明
2021/02/20
2K0
算法--递归--走台阶问题(2种递归+递归改循环)
JavaScript中如何使用递归?
在JavaScript程序中,函数直接或间接调用自己。通过某个条件判断跳出结构,有了跳出才有结果。
Javanx
2019/09/04
2.1K0
JavaScript中如何使用递归?
SQL递归实现循环判断
以前的文章Python小案例(五)循环判断进行分组介绍了如何使用python解决循环判断的问题。现在重新回顾一下这个问题背景:有一列按照某规则排序后的产品,想打包进行组合售卖。要求按顺序进行价格累积,当价格累积超过2000后,需要从下一个产品重新开始打包。
HsuHeinrich
2023/03/29
2.6K0
SQL递归实现循环判断
python中函数递归VS循环
可以理解为在定义的函数内部调用函数自己,形成一个回路。既然形成了一个回路,那么必须要有一个退出的方式。而这种退出的方式一般都是采用条件判断来实现的。
刘金玉编程
2019/08/01
1.7K0
C#如何:编写简单的 Parallel.ForEach 循环
本文档使用 lambda 表达式在 PLINQ 中定义委托。 如果不熟悉 C# 或 Visual Basic 中的 lambda 表达式,请参阅 PLINQ 和 TPL 中的 Lambda 表达式。
全栈程序员站长
2022/09/09
1.6K0
递归与循环的效率迷思
已经不记得最初是从哪里获取的信息了,自己总有一个印象是递归的效率比循环差,因为递归有很大的函数调用开销,再加上递归可能存在的堆栈溢出问题(本文暂不考虑该问题),所以书写代码时还是尽量使用循环为好.
用户2615200
2019/07/02
1.4K0
循环、递归、分治、回溯、动态规划
采用“试错”思想,尝试“分步”去解决问题。在分步的过程中。根据上层结果,尝试此层最优解决此问题,如果此层较于上层不是最优则回溯。
PayneWu
2020/12/18
5760
python如何使用for循环_Python 中for循环的应用
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/170074.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
7.2K0
如何使用Pycharm编写项目 「使用教程」
创建新项目 step1: 双击打开 PyCharm,点击 Create New Project:
睡魔的谎言
2021/01/21
2.9K0
python中如何使用for循环_python循环5次
for循环可以把字符串里面的元素都依次取出来,自动赋值给变量i然后再执行循环体内的代码块
全栈程序员站长
2022/09/22
4.9K0
python中如何使用for循环_python循环5次
25.Python的循环与递归
通过让函数不断调用自身,直到函数可以代入给定的初值,这样可以实现递归结构。递归结构往往都可以用循环结构来代替,而且循环结构的执行效率有可能更高,但递归结构更容易理解。 下面的例子实现一个整数累加函数。
用户4381798
2020/08/11
8250
如何使用zx编写shell脚本
在这篇文章中,我们将学习谷歌的zx库提供了什么,以及我们如何使用它来用Node.js编写shell脚本。然后,我们将学习如何通过构建一个命令行工具来使用zx的功能,帮助我们为新的Node.js项目引导配置。
chuckQu
2022/11/28
4.1K0
PHP递归和循环的速度测试
后来想想,以前看书的时候经常说递归函数会浪费堆栈空间,甚至会导致堆栈溢出,于是重新用循环实现了这个函数:
仁扬
2023/06/18
2750
如何在JavaScript中使用for循环
循环允许我们通过循环数组或对象中的项并做一些事情,比如说打印它们,修改它们,或执行其他类型的任务或动作。JavaScript有各种各样的循环,for循环允许我们对一个集合(如数组)进行迭代。
chuckQu
2022/11/28
5.2K0
如何在JavaScript中使用for循环

相似问题

如何用循环编写这个递归

33

如何递归地编写嵌套的for循环?

30

如何编写大量嵌套的“for”循环(递归)

24

用DotLiquid编写递归循环

10

用Coffeescript编写递归setTimeout循环

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档