C语言中函数调用机理的探讨研究报告
——以求n 阶勒让德多项式的值为例
一.探究意义
通过c语言中函数调用机理的实例研究,尤其是过程较为为复杂的递归调用,实现对c语言函数调用逻辑关系的深入理解,并能将c语言函数调用这一重要功能运用于实际程序设计中。版权文档,请勿用做商业用途
探究方法
1.深入阅读理解课本所学相关知识点,结合网上相关资料,做好理论基础准备。
2.将一个数学递推公式利用函数递归调用的方式转换为c语言程序,在此基础上完成递归调用的理解。
三.理论基础
1.函数是由函数首部和函数体两部分组成。函数首部包括 函数类型 函数名(函数参数类型 函数参数(形参)名),函数体包括申明和执行(包含实参)两部分。版权文档,请勿用做商业用途
2.函数调用的过程
(1)定义函数的形参在未出现函数调用时不占内存的存储单元。在发生函数调用时,形参被临时分配内存单元。
(2)实参对应的值传递给形参,如实例中将3,2分别传给形参中的n,x,然后利用形参完成定义函数中的相关计算。版权文档,请勿用做商业用途
(3)通过return语句将函数值带回主调函数,如实例中的将a的值带回function(2,3)中,就得到了最终结果。版权文档,请勿用做商业用途
3.c语言的函数定义是相互平行独立的,但是能实现嵌套调用(调用一个函数中又调用另一个函数),也能实现递归调用(在调用一个函数的过程中直接或间接地调用该函数本身)。版权文档,请勿用做商业用途
四.实例探究
N阶勒让德多项式的递归公式为:
Pnx
C 语言程序
过程分析:
总体来看,自定义函数完成该公式的计算部分,主函数完成参数设置,函数调用和结果输出,由于自定义函数是在主函数前编写,可以略过函数申明这一部分。版权文档,请勿用做商业用途
在主函数中程序运行到function(简写为f)时,开始调用函数,过程如下:
fct(3,2)
a=10-f(2,2)-2*f(1,2)/3
a=f(2,2)=6-f(1,2)-2*f(0,2)/3
a=f(1,2)=2
a=f(0,2)=1
输入3,2
n=3
n=2
n=1
n=0
首先输入n(项数),x(自变量),在程序读到function(3,2)时,就把n=3,x=2传递给定义函数中的形参n和x,开始调用定义函数,每次调用f函数后都会产生返回值 a,这个值返回到调用f函数处 。例如,调用n=2时,a=6-f(1)-2*f(0)/3,再调用 f(1)=2,f(0) =1,返回值是3.50000,如下图所示,这个返回值就取代了n=3中的f(2,2),由此就可以得出最后的结果,递归的终止条件是n=0.版权文档,请勿用做商业用途
运行结果