尾递归与Continuation在编程中有什么区别?

2026-05-25 08:160阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

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

尾递归与Continuation在编程中有什么区别?

最近和朋友聊天,提到了递归的概念,发现大家对它的理解比较模糊。网上搜索一番,也没有找到讲解详细、完整的资料。于是,我就尝试写了一篇关于递归的文章,希望能补充这方面的知识。

这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,权当一次互联网资料的补充。:P

递归与尾递归

关于递归操作,相信大家都已经不陌生。简单地说,一个函数直接或间接地调用自身,是为直接或间接递归。例如,我们可以使用递归来计算一个单向链表的长度:

public class Node { public Node(int value, Node next) { this.Value = value; this.Next = next; } public int Value { get; private set; } public Node Next { get; private set; } }

编写一个递归的GetLength方法:

public static int GetLengthRecursively(Node head) { if (head == null) return 0; return GetLengthRecursively(head.Next) + 1; }

在调用时,GetLengthRecursively方法会不断调用自身,直至满足递归出口。对递归有些了解的朋友一定猜得到,如果单项链表十分长,那么上面这个方法就可能会遇到栈溢出,也就是抛出StackOverflowException。

阅读全文

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

尾递归与Continuation在编程中有什么区别?

最近和朋友聊天,提到了递归的概念,发现大家对它的理解比较模糊。网上搜索一番,也没有找到讲解详细、完整的资料。于是,我就尝试写了一篇关于递归的文章,希望能补充这方面的知识。

这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,权当一次互联网资料的补充。:P

递归与尾递归

关于递归操作,相信大家都已经不陌生。简单地说,一个函数直接或间接地调用自身,是为直接或间接递归。例如,我们可以使用递归来计算一个单向链表的长度:

public class Node { public Node(int value, Node next) { this.Value = value; this.Next = next; } public int Value { get; private set; } public Node Next { get; private set; } }

编写一个递归的GetLength方法:

public static int GetLengthRecursively(Node head) { if (head == null) return 0; return GetLengthRecursively(head.Next) + 1; }

在调用时,GetLengthRecursively方法会不断调用自身,直至满足递归出口。对递归有些了解的朋友一定猜得到,如果单项链表十分长,那么上面这个方法就可能会遇到栈溢出,也就是抛出StackOverflowException。

阅读全文