递归函数例子 C语言递归函数的执行与求解 - 长篇鬼故事 - 鬼故事网(guigushi.cc)

长篇鬼故事 - 递归函数例子 C语言递归函数的执行与求解

2022-12-11 16:06:03 阅读 :

  导语:函数的递归调用是在调用一个函数的执行过程中,直接或间接地调用该函数本身,使用递归函数的程序结构清晰,简单、易懂。下面就由小编为大家介绍一下C语言递归函数的执行与求解,欢迎大家阅读!

  1 递归函数

  C语言的特点之一就在于允许函数的递归调用,即允许在函数内部直接或间接的调用函数自身,被调用的函数被称为递归函数。递归调用有直接递归调用和间接递归调用两种形式,递归函数常用于解决那些需要分多次求解且每次求解过程都基本类似的问题。构造递归函数的关键在于寻找递归算法和终结条件。递归算法就是解决问题所采取的方法和步骤,一般只要对问题的若干次求解过程进行分析和归纳,找出每一次求解过程之间的规律性,就可归纳出递归算法,终结条件是为了终结函数的递归调用而设置的一个条件或规则。递归调用的一般形式为:

  函数类型 函数名(参数列表)

  {

  ,,,,,

  函数名(参数列表)

  …..

  }

  2 递归条件

  使用递归调用编写程序时,要注意以下几点:

  (1)可以通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式,只是所处理的对象具有一定的规律性。也就是说解决问题的方法相同,调用函数的参数有规律的递增或递减。

  (2)递归函数必须有一个终止处理条件,即必须有一个明确的结束条件,必须在适当的时候能够结束递归调用,否则会使程序陷入死循环,导致系统崩溃。

  (3)有些使用递归算法求解的问题也可使用普通循环算法来实现,相较于循环程序,递归程序结构简单,逻辑清晰,但运行效率低,故在有其他算法可以代替的情况下,要尽量避免使用递归算法编写程序。

  3 递归实例

  例:使用递归方法求n!。

  在数学上n!=1×2×3×…×n-1×n,我们可以写成以下形式

  1 当n=0或n=1时

  n!=

  (n-1)!×n 当n>1时

  根据以上形式,可以写出如下递归调用程序:

  int f(n)

  {

  if(n==1||n==0)

  return 1;

  else

  return f(n-1)*n;

  }

  int main()

  {

  int n;

  scanf(“%d”,&n);

  if(n<0)

  printf(“data error!”);

  else

  printf(“%d”,f(n));

  return 0;

  }

  4 递归函数执行过程

  递归调用之所以能够实现,是因为函数在每一次执行过程中,都会把自己所有形参变量和局部变量复制一个副本,压入栈中,这些副本分别位于栈中不同的内存空间,和函数的其他执行过程毫不相干,这种机制使得递归调用成为可能。一个递归函数的执行过程类似于调用函数和被调用函数是同一个函数的多层嵌套调用,因此,和递归函数的执行过程密切相关的一个重要概念就是递归函数运行的层次。假设调用该递归函数的主函数为第0层,则从主函数调用递归函数则进入第一层;从第n层调用本函数则进入“下一层”,即第n+1层。反之,退出第n层递归调用应返回至“上一层”,即第n-1层。

  在递归函数的执行过程中,另一个非常重要的概念是“递归工作栈”的使用,当一个函数(调用者)调用另外一个函数(被调用者)时,系统会把调用者的所有实在参数,被调用者的形式参数、局部变量,以及调用者的返回地址等信息全部压入“递归工作栈”暂存,当被调用者执行完毕时,系统会从栈中弹出被调用者的形式参数和局部变量,释放被调用者所占用的数据区,接着被调用者返回,然后系统从栈中弹出调用者的返回地址,和实在参数等信息,此时调用者函数可以继续执行下去。

  5 求解方法

  我们通过举例来说具体说明递归函数的求解,比如在主函数中输入n的值为5,即求5!,则函数的求解过程可以用图1-1表示:

  以上问题的具体求解过程描述如下:①调用函数f(5),n=5,函数f(5)的返回结果是f(4)*5,系统暂存f(5)的形参和中间计算结果,然后转去调用函数f(4)。②执行函数f(4),n=4,函数f(4)的返回结果是f(3)*4,系统暂存f(4)的形参和中间计算结果,然后转去调用函数f(3)。③执行函数f(3),n=3,函数f(3)的返回结果是f(2)*3,系统暂存f(3)的形参和中间计算结果,然后转去调用函数f(2)。④执行函数f(2),n=2,函数f(2)的返回结果是f(1)*2,系统暂存f(2)的形参和中间计算结果,然后转去调用函数f(1)。⑤执行函数f(1),n=1,函数f(1)返回结果1,f(1)执行完毕,系统释放f(1)的形参和中间变量所占的数据区,然后返回到调用函数f(1)处。⑥函数f(2)返回结果f(1)*2=1*2=2,f(2)执行完毕,系统释放f(2)的形参和中间变量所占的数据区,然后返回到调用函数f(2)处。⑦函数f(3)返回结果f(2)*3=2*3=6,f(3)执行完毕,系统释放f(3)的形参和中间变量所占的数据区,然后返回到调用函数f(3)处。⑧函数f(4)的返回结果f(3)*4=6*4=24,f(4)执行完毕,系统释放f(4)的形参和中间变量所占的数据区,然后返回到调用函数f(4)处。⑨函数f(5)返回结果f(4)*5=24*5=120,f(5)执行完毕,系统释放f(5)的形参和中间变量所占的数据区,然后返回到调用函数f(5)处,即main函数,此问题求解结束。

  6 结束语

  函数的递归调用,可以把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归算法只需用少量的程序就可描述出解题过程所需要的多次重复计算,大大减少了程序的代码量并增强了程序的可读性。但在求解过程中容易出错和混淆,了解递归函数的执行过程,并借助于图示化的方法、,即可正确、快速求解递归函数。

本文标题:递归函数例子 C语言递归函数的执行与求解 - 长篇鬼故事
本文地址:http://www.guigushi.cc/changpianguigushi/8663.html

相关文章

  • 动漫美女实力排行榜:三笠·阿克曼《进击的巨人》战斗力最强

    三笠,《进击的巨人》的女主角,拥有一半东洋血统的混血儿,从170cm的身高和68kg的体重也可以看出她绝对不是花瓶。幼年时有过一段经历悲惨,后被幼年之时的艾伦所救,从此认为艾伦是世界上最重要的人。她曾为了艾伦的安全而阻止他加入调查兵团,失败后决定跟他一起加入并下定决心要保护他。在调查团中被评价为史无前例的人...

    2022-11-23 长篇鬼故事
  • 第八计

    【第八计】简介:1在见到马巧雨之后,赵昱森便决定帮助马志鹏解决他的麻烦。马巧雨是马志鹏的女儿,今年七岁,患有肾功能衰竭,眼下正奄奄一息地躺在医院里等待肾源。市价三十万,还不包括手术费在内。然而马志鹏的麻...

    2021-06-25 长篇鬼故事
  • 世界已灭绝的动物名单图片

    截止到2019年灭绝了多少动物 野生动物灭绝数据2019 北美白狼 北美白狼:1911年灭绝。纽芬兰白狼,又称北美白狼,是一种体大、头长的狼种,北美白狼全身都是白色的,只有头和...

    2022-10-16 长篇鬼故事
  • 男子高铁霸座打人叫嚣“一直这么坐” 结局令人舒适

    近日,一男子在高铁上霸座打人还叫嚣“一直这么坐”,随后结局令人舒适。上海,铁路警方通报一起“霸座”并殴打乘客被处以行政拘留案件。据悉,8月13日,张某从上海前往长沙,一直霸占他人靠窗座位,拒绝让座并动手打了另一名乘客,同时他还叫嚣自己“一直都是这么坐的”。...

    2022-11-27 长篇鬼故事
  • 丑陋才子罗隐的传奇故事

    罗隐能文擅诗,博学多知,自幼时起便有才名。二十岁时,他踌躇满志,赴京(西安)赶考,参加进士考试,没想到,这一考,就从唐宣宗大中六年(公元852年)考至唐僖宗光启三年(公元887年)。先后十次,考得差不多全京城的人都认识他了。...

    2022-12-03 长篇鬼故事
  • 你看到了什么

    【你看到了什么】简介:滕松从三岁时就被人发现了异常。一天他午睡醒来,一个人在里面的屋中说了半天的话,正好被回家的妈妈听见。三岁时的滕松说话还有些含糊不清,不过妈妈却听得十分清楚:“你是我爷爷,我怎么没有见过你?你去...

    2021-10-03 长篇鬼故事
  • 尹相杰最近的情况如何 尹相杰现在怎么样啊?

    大家好,这里是娱乐不至死,解读有深度,娱乐事件解读节目,我是本文作者三宝,今天为大家带来的娱乐话题:&zwj;50岁尹相杰近况曝光,沦落到街头卖唱,小20岁的女友离他而去。 说到...

    2022-12-04 长篇鬼故事
  • 俄媒称阿总统在阿曼!

    【环球网快讯】据俄新社刚刚报道,与阿富汗政府保持紧密联系的消息人士说,阿富汗总统加尼目前在阿曼。 报道称,谈及阿曼政府此前否认加尼位于该国的消息,该消息人士称,这种反...

    2022-11-21 长篇鬼故事
  • 肖恩米利肯:美国胖男29岁去世 我的600磅人生

    在当地时间每周三晚上演的美国TLC电视台真人秀《我的600磅人生》(My 600-lb Life)中,25岁的肖恩米利肯体重已达900磅(408公斤),站立时间无法超过30秒,已经无法自理生活,加之现在又得了痔疮,生活更是苦不堪言。...

    2022-10-24 长篇鬼故事
  • 电线电缆专业论坛 2017年度电线电缆创新材料及应用高峰论坛

    会议背景 随着我国电力工业的快速发展,电线电缆作为电力传输的主要载体,在电气设备、照明电路和家用电器等广泛领域发挥着越来越重要的作用。可以说其质量直接影响消费者的人身安全和财产安全。近十年来,电缆料行业也同步发展,市场需求大幅增加。在日益专业化...

    2022-12-10 长篇鬼故事
你可能感兴趣