C# lambda递归
这个不是我发明的,只是拿来人脑运行一下,有点烧脑。
1 public class Recursive 2 { 3 delegate T SelfApplicable<T>(SelfApplicable<T> self); 4 5 public static void Run() 6 { 7 // The Y combinator 8 SelfApplicable<Func<Func<Func<int, int>, Func<int, int>>, Func<int, int>>> Y = 9 y => 10 f => 11 x => f(y(y)(f))(x); 12 13 // The fixed point generator 14 Func<Func<Func<int, int>, Func<int, int>>, Func<int, int>> Fix = Y(Y); 15 16 // The higher order function describing factorial 17 Func<Func<int, int>, Func<int, int>> F = 18 fac => 19 x => 20 x == 0 ? 21 1 : 22 x * fac(x - 1); 23 24 // The factorial function itself 25 Func<int, int> factorial = Fix(F); 26 27 Console.WriteLine(factorial(10)); 28 29 } 30 31 }
F == fac => x => x == 0 ? 1 : x * fac(x-1)
Y == y=>f=>x=>f(y(y)(f))(x)
Y(Y) == f=>x=>f(Y(Y)(f))(x)
Y(Y)(F) == x=>F(Y(Y)(F))(x)
Y(Y)(F)(10) == F(Y(Y)(F))(10) A:递归开始的地方
== F((f=>x=>f(Y(Y)(f))(x))(F))(10)
== F(x=>F(Y(Y)(F))(x))(10)
== (fac=>x=>x==0?1:x*fac(x-1))(x=>F(Y(Y)(F))(x))(10)
== (x=>x==0?1:x*(x=>F(Y(Y)(F))(x))(x-1))(10)
== 10==0?1:10*(x=>F(Y(Y)(F))(x))(10-1)
== 10*(x=>F(Y(Y)(F))(x))(9)
== 10*F(Y(Y)(F))(9) B: 就像A,又一次开始
== .......
..........
== 10*9*8*7*6*5*4*3*2*1*F(Y(Y)(F))(0)
== 10*9*8*7*6*5*4*3*2*1*F((f=>x=>f(Y(Y)(f))(x))(F))(0)
== 10*9*8*7*6*5*4*3*2*1*F(x=>F(Y(Y)(F))(x))(0)
== 10*9*8*7*6*5*4*3*2*1*(fac=>x=>x==0?1:x*fac(x-1))(x=>F(Y(Y)(F))(x))(0)
== 10*9*8*7*6*5*4*3*2*1*(x=>x==0?1:x*(x=>F(Y(Y)(F))(x))(x-1))(0)
== 10*9*8*7*6*5*4*3*2*1*(0==0?1:0*(x=>F(Y(Y)(F))(x))(0-1))
== 10*9*8*7*6*5*4*3*2*1*1
好美......
So beautiful......
终极感受:
1 new Func<int, int>(i => 2 new Func<Func<int, int>, Func<int, int>>(fac => x => x == 0 ? 1 : x * fac(x - 1))( 3 new SelfApplicable<Func<Func<Func<int, int>, Func<int, int>>, Func<int, int>>>( 4 y => f => x => f(y(y)(f))(x) 5 )( 6 y => f => x => f(y(y)(f))(x) 7 )( 8 fac => x => x == 0 ? 1 : x * fac(x - 1)) 9 )(i))(10)
No function Name,No trouble.
转载于:https://www.cnblogs.com/javaleon/p/5049863.html
C# lambda递归相关推荐
- php 匿名函数 递归,匿名函数,lambda_C++ lambda 递归调用,匿名函数,lambda,c++ - phpStudy...
C++ lambda 递归调用 自己敲的一个归并排序,C++11 #include #include using namespace std; template void merge_sort(T l ...
- C++ lambda递归
c++ lambda的匿名特性,无法直接在lambda内部递归调用自身. 借助std::function,这是一个可调用对象包装器,可以容纳除了类成员函数指针以外所有的可调用对象,适合作为回调函数使用 ...
- C++11新宠-Lambda函数学习
Lambda背景 Lambda来自lambda calculus(λ演算,如果有兴趣,可以看这篇文章http://cgnail.github.io/academic/lambda-1/)--一种定义和 ...
- C++ 11基本语法及基本算法
文章目录 1. c++关键字 1.1 const_cast.dynamic_cast.reinterpret_cast.static_cast 1.1.1 const_cast 1.1.2 dynam ...
- 讨论JAVA和QT之争
这是两种以跨平台为特色的开发方式.Qt更多被认为是一种框架,但是Qt中有新增一些C++所没有的语法,所以也可以认为是一种编程语言.Java被认为是一种编程语言,但是很多人并不知道JAVA的编程语言其实 ...
- Python3 图片隐写术
Python3 图片隐写术 一.实验简介 wikipedia 关于隐写术的介绍: 隐写术是一门关于信息隐藏的技巧与科学,所谓信息隐藏指的是不让除预期的接收者之外的任何人知晓信息的传递事件或者信息的内容 ...
- 编写递归调用的Lambda表达式
前段时间,我写一个树的访问算法的时候,用了Visitor模式把访问的算法分离了出来,当时打算用lambda表达式写visit算法的,却发现带递归调用的lambda表达式没想象的那么好写,憋了半天愣是没 ...
- python学习-综合练习六(列表翻转、变量交换、复制列表、元素求和(lambda和递归)、字典排序、字典pop)
文章目录 列表翻转 变量交换 复制列表 元素求和 字典排序 字典pop 说明:本篇博文的知识点大部分来自 Python3 实例 列表翻转 列表翻转就是把列表的值按顺序左移,逻辑还是挺简单的. 我之前的 ...
- foreach jdk8 递归_[Java 8] (8) Lambda表达式对递归的优化(上) - 使用尾递归 .
递归优化 很多算法都依赖于递归,典型的比如分治法(Divide-and-Conquer).但是普通的递归算法在处理规模较大的问题时,常常会出现StackOverflowError.处理这个问题,我们可 ...
- node python复用代码_python-代码复用(函数、lambda、递归、PyInstaller库)
一.函数 1.函数定义 def 函数名(参数列表): 2.返回值 return 返回值可以有多个,其实是返回一个tuple ##多个返回值 def sumDiff(x,y): return x+y, ...
最新文章
- AngularJS 杂项知识点
- 交换两个变量的值不使用第三个变量(Java)
- 一个页面区分管理者和普通用户如何设计_如何从「百度知道」中删除 bai du zhi dao?...
- Ubuntu下解压缩文件
- 《深入理解计算机系统》读书笔记(ch1)
- 怎样看pytorch源码最有效?
- python函数式编程-装饰器
- 13防更新描述文件_描述文件终于来了,iOS 13 也能屏蔽更新!
- Qt6.2.1在线安装教程
- 教你快速录制gif动图
- 《数字图像处理》题库1:选择题
- 维普c语言代码查重原理,维普查重太假了?面对变态查重方式,如何修正才能通过考核?...
- 博科Brocade 6505光纤交换机
- mysql 保留两位小数 --round
- Unity提取模型动画
- 深度学习(PyTorch)——shape、view、reshape用法及其区别
- 基于腾讯轻量服务器安装Aria2+AriaNg+Nginx+File Brower 服务
- 详解Unity中的粒子系统Particle System (十)
- 抱团股会一直涨?无脑执行大小盘轮动策略,轻松跑赢指数5倍【附Python代码】
- 英国内政部(Home Office)间谍机构(spy powers)假装它是Ofcom咨询中的一名私人公民1514378402983...
热门文章
- 设置代理,多进程爬虫
- 打破校史,发学校首篇Science的博士小姐姐,近日再发Nature!破解百年谜题
- 【知识图谱】史上最全《知识图谱》2020综述论文,18位作者, 130页pdf
- 【笔记】高效率但却没用过的一些numpy函数
- 【福利派送】高质量AI书籍又免费派送啦
- TF2—tf.keras.layers.BatchNormalization
- 数据科学包8-pandas高级内容之聚合统计
- Python+数据分析+机器学习,数据科学家最少必要知识库!
- 博文视点大讲堂第24期“PPT演示之道”专题讲座成功落幕
- 01函数极限的概念及性质