就是自己调用自己的函数
int f(int x)
{
int y;
z=f(y);
return z;
}
main()
{
int n=10,ans;
ans=f(n);
printf("%d",ans);
}
递归函数的特点:函数定义中直接或间接地调用了本函数,必定存在可使递归调用终止的条件,否则导致出现无限递归。
函数定义中所具有的这些特点是判断函数是否为递归函数的基本要素。
绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。
扩展资料:
数据类型可以通过递归来进行定义,比如一个简单的递归定义为自然数的定义:“一个自然数或等于0,或等于另一个自然数加上1”。Haskell中可以定义链表为:
data ListOfStrings = EmptyList | Cons String ListOfStrings
这一定义相当于宣告“一个链表或是空串列,或是一个链表之前加上一个字符串”。可以看出所有链表都可以通过这一递归定义来达到。
——递归算法
就是函数在其内部重复调用自身,直到满足一定条件后输出返回值
如
/// <summary>
/// 根据节点添加子节点
/// </summary>
/// <param name="node">需要添加子节点的节点</param>
/// <returns>添加了子节点的节点</returns>
private TreeNode addChildNodes(TreeNode node)
{
DataTable dt_noid_0 = new WSBLLItems()GetItemsByNoid(nodeValue, AdminClassGetAID(Page));
if (dt_noid_0 != null && dt_noid_0RowsCount > 0)
{
foreach (DataRow dr in dt_noid_0Rows)
{
TreeNode node_0 = new TreeNode();
node_0Value = dr["NoID"]ToString()Trim();
node_0Text = dr["Name"]ToString()Trim();
nodeChildNodesAdd(addChildNodes(node_0));
}
}
return node;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)