a过程调用 c调用其他文件中函数的过程和d过程。当c过程中不满足某条件,需要终止a过程中的所有后边的调用d过程。

函数递归调用(c语言为例)
定义:在调用一个函数的过程中又出现直接或间接调用该函数本身,称为函数的递归调用。
int fun(int x){
return fun(x+2);//在执行f函数的过程中又要调用f函数
在调用函数f的过程中,又要调用f函数,这是直接调用本函数,如图1
如果在调用f1函数过程中要调用f2函数,而在调用f2函数的过程中又要调用f1函数,就是间接调用本函数,见图2
不过图1与图2这两种递归调用都是无终止的自身调用。显然程序中不应该出现这种无终止的自身调用,而只应出现有限次数、有终止的递归调用,这可以通过if语句来控制,只有在某一条件成立时才继续执行递归调用;否则就不再继续。
关于递归的概念,有些初学者感到不好理解,下面举一谭浩强老师的《c程序设计(第四版)》中的例子说明:
例一:有5个学生在一起,问第五个学生多少岁,他说他比第四个学生大2岁;问第四个学生多少岁,他说比第三个学生大2岁……最后问第一个学生,他说是10岁。请问第5个学生多大。
思路1:顺序法age1 = 10;age2 = age1 + 2; …; age5 = age4 + 2;则可以通过for循环解决问题:
void main() {
int age[5] = {0}; age[0] = 10;
for(int i = 0; i & 4 ;i++) {
age[i + 1] = age [i] + 2;
printf("the fifth student’sage is %d\n", age[4]);
思路2:要求第5个学生的年龄,就必须先知道第四个学生的年龄,而第四个学生的年龄也不知道,要求第四个学生的年龄必须知道第三个学生的年龄,而第3个学生的年龄又取决于第二个学生的年龄,第二个学生的年龄取决于第一个学生的年龄。而每一个学生的年龄都比其前1个学生的年龄大2。即:
age(5) = age(4) + 2; age(4) = age(3) + 2; age(3) = age(2) + 2; age(2) = age(1) + 2; age(1) = 10;
可以用数学公式表达如下:
age(n)= 10; (n = 1)
age(n)= age(n-1) + 2(n & 1)
可以看到,当n &1时,求第n个学生的年龄的公式是相同的。因此可以用一个函数表示上述关系。图3表示求第5个学生年龄的过程。
显然,这是一个递归问题。由图3所示,求解可分为两个阶段:第1阶段是“回溯”,即将第n学生的年龄表示为第(n-1)个学生的函数,而第(n-1)个学生的年龄仍然还不知道,还要“回溯”到第(n-2)个学生的年龄……直到第一个学生的年龄。此时age(1)已知,不必再向前推了。然后开始第二阶段,采用递推方法,从第一个学生的已知年龄推算出第二个学生的年龄(12岁),从第二个学生的年龄推算出第三个学生的年龄(14岁)……一直推算出第5个学生的年龄(18岁)为止。也就是说,一个递归的问题可以分为“回溯”和“递归”两个阶段。要经历若干步才能求出最后的值。显而易见,如果要求递归过程不是无限制进行下去,必须具有一个结束递归过程的条件。本例中,age(1)=10,就是使递归结束的条件。
c语言代码如下:
int useRecursiveToGetAge(int n){
if (n == 1) {
return 10;
return useRecursiveToGetAge(n - 1) + 2;
void main(){
printf("the fifth student's age is %d\n",useRecursiveToGetAge(5));
例二:求n!。
要回宿舍了,直接上代码。
//思路一:非递归
void noneRecursiveForFactorial() {
int i, fac = 1;
printf("please input an Integer which is large than 1\n");
scanf("%d", &i);
int temp =
while(i &= 1){
printf("the factorial value of %d is %d\n", temp, fac);
//思路二:递归
int useRecursiveForFactorial(int i){
if (i == 1) {
return useRecursiveForFactorial(i - 1) *
void main(){
//noneRecursiveForFactorial();
printf("please input an Integer which is large than 1\n!!!");
scanf("%d", &i);
printf(the recursive value of %d is %d\n, i, useRecursiveForFactorial(i));
递归函数的理解 (三种类型)
c语言:函数的递归调用
C语言学习篇-6函数、递归、嵌套
C函数的调用-----递归调用
C语言函数的递归和调用实例分析
C语言函数的递归调用
c语言之递归调用
【C语言】用递归函数是实现函数功能的几个例子
C语言 递归方法调用函数计算n!
没有更多推荐了,百度题库旨在为考生提供高效的智能备考服务,全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效服务,助您不断前行!
京ICP证号&&
京网文[3号&&
Copyright (C) 2018 Baidu以下试题来自:
单项选择题以下叙述中错误的是A.如果过程被定义为Static类型,则该过程中的局部变量都是Static类型B.Sub过程中不能嵌套定义Sub过程C.Sub过程中可以嵌套调用Sub过程D.事件过程可以像通用过程一样由用户定义过程名
为您推荐的考试题库
你可能感兴趣的试题
1A.算法程序的长度B.算法程序中的指令条数C.执行算法程序所占的存储空间D.算法执行过程中所需要的存储空间
热门相关试卷
最新相关试卷sql将一个表中的数据插入到另一个表中的方法
转载 &更新时间:日 16:37:28 & 作者:
这篇文章主要介绍了sql将一个表中的数据插入到另一个表中的方法,需要的朋友可以参考下
列名不一定要相同,只要你在HH中列出要插入列的列表跟select from mm表中的选择的列的列表一一对应就可以了,当然两边的数据类型应该是兼容的。 insert into hh (fielda,fieldb,fieldc) select fieldx,fieldy,fieldz from mm
代码如下: ---更新计量点中不存在的数据,将台帐中的信息转移到计量点中 insert into MetricPoints (MeterID,MetricPointName,[Description],DepartmentID,MediumID) (SELECT m.MeterID,m.MetricItems+m.InstallPlace as m_MetricPointName,m.MetricItems,m.DepartmentID,m.MediumID FROM Meters m WHERE NOT EXISTS (SELECT 1 FROM MetricPoints WHERE MetricPoints.MeterID = m.MeterID ) and m.MediumID =2)
声名:a,b ,都是表
代码如下: --b表存在(两表结构一样) insert into b select * from a
若两表只是有部分(字段)相同,则
代码如下: insert into b(col1,col2,col3,col4,...) select col1,col2,col3,col4,... from a where...
把表a插入到表b中去。
代码如下: --b表不存在 select * into b from a // select (字段1,字段2,...) into b from a
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具> 问题详情
在过程定义中,Private表示()。A. 此过程可以被其他过程调用B. 此过程不可以被任何其他过程调用C
悬赏:0&答案豆
发布时间:
在过程定义中,Private表示()。A. 此过程可以被其他过程调用B. 此过程不可以被任何其他过程调用C. 此过程只可以被本工程中的其他过程调用D. 此过程只可以被本窗体模块中的其他过程调用请帮忙给出正确答案和分析,谢谢!
为您推荐的考试题库
您可能感兴趣的试题
1程序运行后,利用冒泡法对数组a中的数据按从小到大排序。请在空白处填上适当的内容,在横线处应填写(  )。A. Form=0 To 4&&&B. Form=0 To 4C. Form=1
To 4D. Form=1 To 42关于变量作用域,下列叙述中正确的是(  )。A. 在窗体的Form. Load事件过程中定义的变量是全局变量B. 局部变量的作用域可以超出所定义的过程C. 在某个Sub过程中定义的局部变量可以与其他事件过程中定义的局部变量同名,但j作用域只限于该过程D. 在调用过程中,所有局部变量被系统初始化为0或空字符串3要想不使用Shift或Ctrl键就能在列表框中同时选择多个项目,则应把该列表框的MultiSelect属性设置为(  )。A. 0&&&B. 1&&&C. 2&&&D. 其他4以下数据结构中,属于非线性数据结构的是(  )。A. 栈&&&B. 线性表&&&C. 队列D. 二叉树
我有更好的答案
请先输入下方的验证码查看最佳答案
图形验证:
验证码提交中……
每天只需0.4元
选择支付方式
支付宝付款
郑重提醒:支付后,系统自动为您完成注册
请使用微信扫码支付(元)
支付后,系统自动为您完成注册
遇到问题请联系在线客服QQ:
恭喜你被选中为
扫一扫-免费查看答案!
请您不要关闭此页面,支付完成后点击支付完成按钮
遇到问题请联系在线客服QQ:
恭喜您!升级VIP会员成功
提示:请截图保存您的账号信息,以方便日后登录使用。
常用邮箱:
用于找回密码
确认密码:}

我要回帖

更多关于 c调用其他文件中函数的过程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信