返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#实现递归调用的Lambda表达式
  • 112
分享到

C#实现递归调用的Lambda表达式

2024-04-02 19:04:59 112人浏览 安东尼
摘要

前段时间,我写一个树的访问算法的时候,用了Visitor模式把访问的算法分离了出来,当时打算用lambda表达式写visit算法的,却发现带递归调用的lambda表达式没想象的那么好

前段时间,我写一个树的访问算法的时候,用了Visitor模式把访问的算法分离了出来,当时打算用lambda表达式写visit算法的,却发现带递归调用的lambda表达式没想象的那么好写,憋了半天愣是没写出来,由于当时赶进度,就写成了普通的函数了。

今天晚上研究了一下递归调用的Lambda表达式的写法,发现也还是比较简单的,就是脑袋要转个弯(可能当时这个弯没有转过来),首先给一个简单的示例:

    int i = 1;
    RecursiveRun(self =>
        {
            Console.WriteLine("hello world " + i++);
            self();
        });

    static void RecursiveRun(Action<Action> action)
    {
        action(() => RecursiveRun(action));
    }

可能有人说函数RecursiveRun是无参数的,基本上没什么用,下面这个就是带一个参数的版本了(如果需要更多的参数的版本,直接把RecursiveRun函数稍稍修改即可):

    static void RecursiveRun<T>(T obj, Action<T, Action<T>> action)
    {
        action(obj, o => RecursiveRun(o, action));
    }

通过这个函数,就可以把二叉树的遍历算法用lambda表达式给表示出来了:

    class BinTree
    {
        public int Value { get; set; }
        public BinTree Left { get; set; }
        public BinTree Right { get; set; }

        public BinTree(int value)
        {
            this.Value = value;
        }

        public void Accept(Action<BinTree> visitor)
        {
            visitor(this);
        }

        public void Accept(Action<BinTree, Action<BinTree>> visitor)
        {
            visitor(this, node => node.Accept(visitor));
        }

        public override string ToString()
        {
            return Value.ToString();
        }
    }

    var nodes = Enumerable.Range(0, 5).Select(i => new BinTree(i)).ToArray();

    nodes[0].Left = nodes[1];
    nodes[0].Right = nodes[2];
    nodes[1].Left = nodes[3];
    nodes[1].Right = nodes[4];

    nodes[0].Accept((node, visitor) =>
        {
            Console.WriteLine(node.Value);
            if (node.Left != null)
                visitor(node.Left);
            if (node.Right != null)
                visitor(node.Right);
        });

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C#实现递归调用的Lambda表达式

本文链接: https://lsjlt.com/news/151873.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C#实现递归调用的Lambda表达式
    前段时间,我写一个树的访问算法的时候,用了Visitor模式把访问的算法分离了出来,当时打算用lambda表达式写visit算法的,却发现带递归调用的lambda表达式没想象的那么好...
    99+
    2024-04-02
  • C#如何实现递归调用的Lambda表达式
    这篇文章主要讲解了“C#如何实现递归调用的Lambda表达式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C#如何实现递归调用的Lambda表达式”吧!首先给一个简单的示例: &n...
    99+
    2023-07-02
  • C++ lambda 表达式是否支持递归?
    是的,c++++ lambda 表达式可以通过使用 std::function 支持递归:使用 std::function 捕获 lambda 表达式的引用。通过捕获的引用,lambda...
    99+
    2024-04-17
    c++ 递归 堆栈溢出
  • 如何使用Lambda表达式编写递归
    这篇文章主要介绍“如何使用Lambda表达式编写递归”,在日常操作中,相信很多人在如何使用Lambda表达式编写递归问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Lambda表达式编写递归”的疑惑有所...
    99+
    2023-06-17
  • 怎么使用Lambda表达式编写递归
    本篇内容主要讲解“怎么使用Lambda表达式编写递归”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Lambda表达式编写递归”吧!使用 Lambda 表达式构建递归函数很多朋友认为这很容...
    99+
    2023-06-17
  • 如何使用Lambda表达式编写递归函数
    这篇文章主要介绍“如何使用Lambda表达式编写递归函数”,在日常操作中,相信很多人在如何使用Lambda表达式编写递归函数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用Lambda表达式编写递归函数...
    99+
    2023-06-17
  • C++ 函数递归详解:递归调用的形式和实现
    递归是函数自身调用的一种编程技术,在 c++++ 中有两种常见形式:直接递归和间接递归。要实现递归,函数必须满足基线条件和递归调用。实战案例中,利用递归计算阶乘,其基线条件是 n 为 0...
    99+
    2024-05-04
    c++ 递归
  • C# Lambda表达式树怎么实现
    这篇文章主要介绍“C# Lambda表达式树怎么实现”,在日常操作中,相信很多人在C# Lambda表达式树怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C# Lambda表达式树怎么实现”的疑惑有所...
    99+
    2023-06-17
  • MySQL 递归 CTE(公用表表达式)
    MySQL 中的递归 CTE(公用表表达式)是一种处理递归查询的方法。CTE 允许您在查询中创建临时表,并在查询中引用该临时表。以递...
    99+
    2023-10-20
    MySQL
  • C++ 函数调用 Lambda 表达式:参数传递和返回值的回调优化
    在 c++++ 中,可以使用 lambda 表达式作为函数参数,实现回调函数的灵活性。具体而言:参数传递:通过 std::function 包装 lambda 表达式,以函数指针形式传递...
    99+
    2024-05-03
    c++ lambda
  • 【javaSE】 Lambda表达式与Lambda表达式的使用
    文章目录 🌳Lambda表达式的背景🚩Lambda表达式的语法🚩函数式接口 🎋Lambda表达式的基本使用🎄...
    99+
    2023-09-15
    开发语言 java Lambda表达式 源码
  • C#中Lambda表达式的用法
    从C#3.0开始,可以使用lambda表达式把实现代码赋予委托。lambda表达式与委托(https://www.jb51.net/article/244051.htm)直接相关。当...
    99+
    2024-04-02
  • C# Lambda表达式怎么用
    这篇文章主要为大家展示了“C# Lambda表达式怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C# Lambda表达式怎么用”这篇文章吧。C#语言还是比较常见的东西,这里我们主要介绍C#...
    99+
    2023-06-17
  • C++ 函数 Lambda 表达式作为参数传递
    c++++ 的 lambda 表达式可作为参数传递给其他函数,语法为:auto lambda_function = [](parameter_list) -> return_typ...
    99+
    2024-04-20
    函数参数 c++
  • C++中的Lambda表达式及表达式语句
    目录一、概念二、左值与右值三、类型转换四、操作符五、思考1、思考下面x变量是左值还是右值,有什么特性?2、思考一下以下赋值操作符的原始代码是怎样的?3、思考以下代码做了什么事情?一、...
    99+
    2024-04-02
  • SQL Server中怎么利用公用表表达式实现递归
    这篇文章给大家介绍SQL Server中怎么利用公用表表达式实现递归,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。公用表表达式简介:公用表表达式 (CTE) 可以认为是在单个 SELE...
    99+
    2024-04-02
  • C++实例详解lambda表达式的使用
    目录lambda表达式1、lambda表达式语法2、lambda应用3、lambda表达式的应用实践1、计算器案例2、智能指针案例3、优先级队列lambda表达式 C++11 函数对...
    99+
    2024-04-02
  • C++lambda表达式使用介绍
    目录前言lambda表达式格式一些语法走进底层前言 C++98中的一个例子。 #include <iostream> #include <vector> #i...
    99+
    2024-04-02
  • C++ 函数参数传递方式与 lambda 表达式的关系
    函数参数传递方式决定了参数在调用者和函数实现之间传递的方式,包括值传递、引用传递和 const 引用传递。lambda 表达式通过值捕获来访问函数外部变量,捕获类型(值捕获、引用捕获或无...
    99+
    2024-04-12
    c++ lambda 函数参数
  • Java8使用lambda实现Java的尾递归
    前言本篇介绍的不是什么新知识,而是对前面讲解的一些知识的综合运用。众所周知,递归是解决复杂问题的一个很有效的方式,也是函数式语言的核心,在一些函数式语言中,是没有迭代与while这种概念的,因为此类的循环通通可以用递归来实现,这类语言的编译...
    99+
    2023-05-30
    java8 lambda 尾递归
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作