尾递归与Continuation在编程中有什么区别?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2588个文字,预计阅读时间需要11分钟。
最近和朋友聊天,提到了递归的概念,发现大家对它的理解比较模糊。网上搜索一番,也没有找到讲解详细、完整的资料。于是,我就尝试写了一篇关于递归的文章,希望能补充这方面的知识。
这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,权当一次互联网资料的补充。: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分钟。
最近和朋友聊天,提到了递归的概念,发现大家对它的理解比较模糊。网上搜索一番,也没有找到讲解详细、完整的资料。于是,我就尝试写了一篇关于递归的文章,希望能补充这方面的知识。
这几天恰好和朋友谈起了递归,忽然发现不少朋友对于“尾递归”的概念比较模糊,网上搜索一番也没有发现讲解地完整详细的资料,于是写了这么一篇文章,权当一次互联网资料的补充。: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。

