如何用Lambda表达式实现递归函数?

2026-05-25 10:002阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2120个文字,预计阅读时间需要9分钟。

如何用Lambda表达式实现递归函数?

其实这并非一个简单的事件,尽管有些朋友认为它很简单。伪递归,我的理解是,某些看起来像递归的做法实际上并非真正的递归。例如,我们想要递归地实现某功能,但实际上并非递归,所以我将其称为伪递归。

如何用Lambda表达式实现递归函数?

其实这从来不是一个很简单的事情,虽然有些朋友认为这很简单。

伪递归

我的意思是,某些看上去像递归的做法,事实上并非是递归,所以我把它叫做是“伪”递归。

例如,我们想要使用Lambda表达式编写一个计算递归的fac函数,一开始我们总会设法这样做:

Func<int, int> fac = x => x <= 1 ? 1 : x * fac(x - 1);

不过此时编译器会无情地告诉我们,fac还没有定义。于是您可能会想,这个简单,分两行写咯。于是有朋友就会给出这样的代码:

Func<int, int> fac = null; fac = x => x <= 1 ? 1 : x * fac(x - 1);

这样看起来也很“递归”,执行起来似乎也没有问题。但是,其实这并没有使用Lambda表达式构造一个递归函数,为什么呢?因为我们使用Lambda表达式构造的其实只是一个普通的匿名方法,它是这样的:

x => x <= 1 ? 1 : x * fac(x - 1);

既然是“匿名方法”,这个构造的东西是没有名字的——因此用Lambda表达式写递归“从来不是一个很简单的事情”。

阅读全文

本文共计2120个文字,预计阅读时间需要9分钟。

如何用Lambda表达式实现递归函数?

其实这并非一个简单的事件,尽管有些朋友认为它很简单。伪递归,我的理解是,某些看起来像递归的做法实际上并非真正的递归。例如,我们想要递归地实现某功能,但实际上并非递归,所以我将其称为伪递归。

如何用Lambda表达式实现递归函数?

其实这从来不是一个很简单的事情,虽然有些朋友认为这很简单。

伪递归

我的意思是,某些看上去像递归的做法,事实上并非是递归,所以我把它叫做是“伪”递归。

例如,我们想要使用Lambda表达式编写一个计算递归的fac函数,一开始我们总会设法这样做:

Func<int, int> fac = x => x <= 1 ? 1 : x * fac(x - 1);

不过此时编译器会无情地告诉我们,fac还没有定义。于是您可能会想,这个简单,分两行写咯。于是有朋友就会给出这样的代码:

Func<int, int> fac = null; fac = x => x <= 1 ? 1 : x * fac(x - 1);

这样看起来也很“递归”,执行起来似乎也没有问题。但是,其实这并没有使用Lambda表达式构造一个递归函数,为什么呢?因为我们使用Lambda表达式构造的其实只是一个普通的匿名方法,它是这样的:

x => x <= 1 ? 1 : x * fac(x - 1);

既然是“匿名方法”,这个构造的东西是没有名字的——因此用Lambda表达式写递归“从来不是一个很简单的事情”。

阅读全文