摘要:
lambda是匿名函数,因为没有名字,也没有关键字引用自身,因此递归的编码就成了问题。一、最简单有效的方案是:Func<int,int> f =null; //变量须先赋值才能使用f = n=> n==0?1:n*f(n-1);f(11); //==39916800有人担心f会被恶意修改,因为就是一个委托变量,而且认为f是委托,而不是匿名函数自身,所以不算匿名函数递归。我觉得,虽然是委托,但是引用的就是匿名函数,函数指针调用的函数难道不是函数自身吗?二、要避免变量被恶意修改,方案是:Func<int,int> f = null;f = n =>{Func&l 阅读全文
搜索
积分与排名
- 积分 - 308563
- 排名 - 3168
随笔分类 (315)
最新评论
- 1. Re:为什么0.1无法被二进制小数精确表示?
- @诺贝尔 感谢回复!你的思路给了我一些启发...
- --safoie
- 2. Re:为什么0.1无法被二进制小数精确表示?
- @safoie 你好,确实是我数错了,是5位。...
- --诺贝尔
- 3. Re:为什么0.1无法被二进制小数精确表示?
- 您好,感谢您的补充,根据我的理解,1右移一位等于1×2=2;右移两位等于1×(2的平方) =4;右移三位等于1×(2的三次方)=8;右移四位等于1×(2的四次方)=16,右移五位的话才等于1×(2的五...
- --safoie
- 4. Re:为什么0.1无法被二进制小数精确表示?
- @safoie 你好,这里的算法表现力不足,因为没有采用数学符号。 这里面用的就是辗转相除法。1/20,被除数向右移动一位,等于1*2,4位等于32,比除数大,然后用32-20,剩余12。 它和普通的...
- --诺贝尔
- 5. Re:为什么0.1无法被二进制小数精确表示?
1* 2* 2* 2* 2 为啥等于32?右移四位是以什么为依据的呢?
- --safoie