c语言函数递归好处,C语言函数递归探析.doc

c语言函数递归好处,C语言函数递归探析.docC语言函数递归探析C语言函数递归探析摘要:函数递归其有逻辑性强、结构层次清晰,可以用数学归纳法得出正确结论的优点。对C语言的函数递归进行了论述。??关键词:C语言;函数递归;程序??中图分类号:TP312文献标识码:A文章编号:1672-7800(2011)03-0075-02?お???作者简介:於月红(1983-),女,浙江台州人,浙江广播电视大学黄岩分校助教,研究方向为计算机科学与技术。…

c语言函数递归好处,C语言函数递归探析.doc

C语言函数递归探析

C语言函数递归探析

摘 要:函数递归其有逻辑性强、结构层次清晰,可以用数学归纳法得出正确结论的优点。对C语言的函数递归进行了论述。??

关键词:C语言;函数递归;程序??

中图分类号:TP312 文献标识码:A 文章编号:1672-7800(2011)03-0075-02?お?

??

作者简介:於月红(1983-),女,浙江台州人,浙江广播电视大学黄岩分校助教,研究方向为计算机科学与技术。

1 函数递归??

所谓函数递归,是指在一个函数中有直接或间接调用函数本身。函数直接递归指函数直接在本函数中调用自身。函数间接递归指本函数调用其它函数,其它函数又调用本函数。直接递归和间接递归图解如图1所示。??

??

如图1所示,递归调用可以说是一种函数循环,程序中循环必须有中止条件,否则就会陷入死循环。所以,递归调用必须有中止条件,只有递归条件满足时才调用自身,否则(即满足中止条件),函数就不再递归调用。C语言中函数递归有独特的作用。很多时候,巧用函数递归可以解决许多看似复杂难解的问题。??

2 函数递归特征??

那么什么时候函数可以用递归方法呢?递归函数有何特征?本文总结了3条规则:①函数中所需要计算的数值可以通过调用自身得到,所以递归函数必须有返回值;②函数参数值往往是有规律地递增或递减;③必须有中止条件,一般以限定函数参数值或递归函数返回值为中止条件。??

让我们先分析一下简单的递归函数:??求n!??

n!的数学表达式为:n!=n*(n-1)*(n-2)*……*2*1??

当n=1时,值为1??

当n>1时,n!=n*(n-1)!??

这个数学表达式能够满足3条规则,求n!的函数值为n乘以(n-1)!的函数值,函数参数只要递减1设置即可,另外设置中止返回值为1,即最后一个函数的值为1(因为1!=1)。????

该递归函数如下: ??

int f2(int n)??

{??

if(n<1) return 0;??

else if(n= =1) return 1;??

else ??

return n*f(n-1);??

}??

这个问题很简单明了,不再作深入分析。再看另外一题:求∑ n!??

此题的数学表达式为1!+2!+ ……+(n-1)!+n!??

上题已经得知n!可以通过递归函数得解。而这个函数看上去也有相似规律可循。设求此题的函数为f1(n);则当??

n=1时,f1(1)=1??

n=2时,f1(2)=1!+2!=f2(1)+f2(2)=f1(1)+f2(2)??

n=3时,f1(3)=1!+2!+3!=f1(2)+f2(3)??

……??

n=n时,f1(n)=f1(n-1)+f2(n) ??

显然f1(n)需要得到的数值包含f1(n-1),且函数参为规律的递减,函数中止条件设返回值为1。满足了3个规则,可以用递归解决。??

#include??

long int f1(int n); //函数声明??

long int f2(int n);??

void main()??

{??

int n=20;??

printf(“%ld”,f1(n));??

}??

long int f1(int n)??

{??

if(n= =1) return 1;??

else return f2(n)+f1(n-1); //既调用函数f2,又递归调用函数f1??

}??

long int f2(int n)??

{??

if(n= =1)??

return 1;??

else ??

return n*f2(n-1);//函数f2递归调用 ??

}??

本函数为双层递归调用函数。通过以上例子的分析,不难看出函数递归的优点:逻辑性强,结构层次清晰,可以用数学归纳法得出正确结论。??

3 函数递归应用??

我们在学习数据结构时,发现递归调用经常出现在树和图的生成(也可以说是一种排序问题)和遍历(特殊的查找问题)中,特别是在数据排序和数据查找时被频繁地使用,充分体现了函数递归的优势和作用。??

如在数据结构课程遍历二叉树和线索二叉树时,给出的先序遍历递归函数:??

/*在以下的函数中,Status、TelemType为自定义的数据结构,BiTree为自定义的二叉树数据结构*/??

Status PreOrderTraverse

今天的文章c语言函数递归好处,C语言函数递归探析.doc分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/30034.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注