欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    c语言函数递归调用.docx

    • 资源ID:798188       资源大小:20.47KB        全文页数:7页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    c语言函数递归调用.docx

    C语言函数递归调用在调用一个函数的过程中又出现直接或间接地调用该函数本身,这种用法称为函数的递归调用。例如:intf(intX)intx,z;z=f(x);在执行f函数的过程中又要调用f函数return(2+z);在调用函数f的过程中,又要调用f函数(本函数),这是直接调用本函数。如果在调用fl函数过程中要调用f2函数,又在调用f2的数过程中又要调用fl,这就是间接调用本函数。这两种递归调用都是无终正的自身调用,程序中不应出现这种无终止的递归调用,只应出现有限次数的、有终止的递归调用,用if语句来控制,只有在某一条件成立时才继续执行递归调用:否则就不再继续。如n=l;C=IO,没有条件一直调用,有条件把递归调用变已知值,无调用函数,消失了。例:有5个学生坐在一起,问第5个学生多少岁,他说比第4个学生大2岁,问第4个学生岁数,他说比第3个学生大2岁。问第3个学生,又说比第2个学生大2岁,问第2个学生,说比第1个学生大2岁。最后问第1个学生,他说是10岁。请问第5个学生多大。每一个学生的年龄都上匕其前1个学生的年龄大2o说明共用一个函数关系。可以用数学公式表述如下:age(n)=10(=1)age(n)=age(n-1)+2(n>1)当n>1时,不断调用同一个函数,就是一个递归问题。回溯将第5个学生的年龄表示直到第1个学生的年龄。此时age(1)已知等于10,没有可调用函数,出现已知值,不再出现调用。从第1个学生的已知年龄推算出第2个学生的年龄(12岁),一直推算出第5个学生的年龄18岁为止。如果要求递归过程不是无限制进行下去,必须具有一个结束递归过程的条件。就是要出现已知值,不再调用下去。如:age(1)=10,就是使递归结束的条件,出现已知值,不再调用了,也就终止递归了。编写程序:用一个函数来描述上述递归过程:intage(intn)求年龄的递归函数,内有调用自身的函数。intc;if(n=1)c=10Il这里c=age(l),并不等于age(5)elsec=age(n-l)+2;return(c);/c用作存放函数的返回值的变量用一个主函数调用age函数,求得第5个学生的年龄。程序如下:#include<stdio.h>intmain()函数名不用分号,因为函变量名与大括号实体内容是一体,不可分离,不用分号,内部也是连接的,不用逗号。intage(intn);对age函数的声明,临时变量只用主函数对调用函数变量定义类型非void非任意类型printf(”No.5.age:%dn,age(5);输出第5个学生的年龄return0;intage(intn)自定义递归函数,给调用时创造空间,调用结束时立即释放空间,依靠主函数定义的临时变量存放空间。intc;if(n=1)c=10;如果n等于1,年龄为10,控制递归调用进度,当递归函数推进n二1时,停止。else如果n不等于1年龄是前一个学生的年龄加2c=age(n-l)+2;return(c);main函数中age函数共被调用5次即age(5)xage(4)xage(3)xage(2)xage(l)o其中age(5)是main函数调用的,其余4次是在age函数中调用自己的,即递归调用4次。在某一次调用age函数时并不是立即得到age(n)的确定值,而是一次又一次地进行递归调用,到age(1)时才有确定的值,然后再递推出age(2)、age、age、age。age(l)=10作为递归的终止条件,使递归消失。当n等于2时,应执行c=age(n-1)+2/,由于n=2.它相当Tmc=age(1)+2;"。注意age(1)的值,此时n=1,应执行c=10=age(l)",即不再递归调用age函数了,没有调用自身的函数了,递归调用也就结束。依此类推,可以得到age(5)值为18o用递归方法求n!o求n!可以用递推方法,递推法的特点是从一个已知的事实(如1!=1)出发,按一定规律推出下一个事实(如2!=1!*2),再从这个新的已知的事实出发,再向下推出一个新的事实(3!=3*2!)。n!=n*(n-1)!求n!也可以用递归方法,即5!等于4!*5,而4=3!*4,.1!=L可用下面的递归公式表示:编写程序:#include<stdio.h>intmain()intfac(intn);Ilfac函数声明intn;inty;printf(,inputaintegernumber:");scanf(n%d”,&n);这里n可改变,不固定值,将程序变为通用程序,调用参数n任意整数。V=fac(n);调用n变量空间值printf(%d!=%dnznzy);分取提取n值为n!,提取y值,变为y=f(n),执行调用,调用函数具有递归功能。intfac(intn)自定义调用函数及参变量intf;if(n<0)printf(,n<0zdataerrorn);elseif(n=0n=1)f=l;elsef=fac(n-l)*n;return(f);每次调用fac函数后,其返回值应返回到调用fac函数处。例如当n=2时,从函数体中可以看到f=fac(1)*2,再调用fac(1)z返回值为Io这个1就取代了f=fac(1)x2中的fac(1).从而f=fac(2)=2o递归终止条件为n=O11gn=l至Jn=2时能求出f(1),为什么还出现n=0,因为当调用f(l)直接等于1,n<0时还包括n=0,直接调用f(0)等于Ie

    注意事项

    本文(c语言函数递归调用.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开