递归的一些基本的理解(个人)

1、定义:使用被定义对象的自身来为其下定义(即自己给自己下定义)。

2、过程:递归的过程是一个过程直接或间接地调用自己。

3、使用情况:

1.定义是递归的;

2.数据结构是递归的 ;

3.问题的解法是递归的

4、函数中的递归调用:

1.基于公式的递归;

2.基于语义的递归(如汉诺塔问题、快速排序和八皇后问题等)。

5、适用递归方法的问题:

1.有一个初始状态(使递归过程具有出口,而不是无限递归)

2.后续的情况可由前面的状态推出(允许调用自己)

6、递归过程的理解:

递归过程的实现需要自己调用自己,在每一次的递归调用时,需要为过程中使用的参数、局部变量等另外分配存储空间。

递归层层向下进行,而退出时则是与之相反的。

如对于n!的递归过程。递归的执行是先进行回溯至初始状态,在递推到所需的状态去求解问题

如对于n!的递归过程。递归的执行是先进行回溯至初始状态,在递推到所需的状态去求解问题

可以用栈的思想理解递归的过程。每一层的递归调用需分配的空间形成递归的工作记录,按后进先出的栈组织。

在这里插入图片描述

我们以阶乘的递归过程为例。

首先我们要求3!的值将n=3代入阶乘函数fac中,此时我们执行到第5行时暂停,因为此时我们需要fac(2)才能继续执行,所以我们将该位置记录下来,放入栈中,即n=3,第5行,f=3 * fac(2);以此类推,不断记录停止的位置并记录到栈中,直到执行到初始状态,在fac中即为fac(0),此时我们return了f的值,即fac(0)=1,现在我们可以将栈中所记录的各个位置放出了,由此得到最后3!=6。

7、递归程序的要素:

1.递归语句(如阶乘中的f = n * fac(n-1))

2.递归次数

3.递归出口(即该问题的初始状态)

8、递归问题的思路:

可以先根据题目条件找到递归出口,然后可以根据第n与第n-1或n+1之间的关系,写出递归关系,最后得到递归函数。

参考文章:懒猫老师-C语言-递归函数(函数递归调用)_哔哩哔哩_bilibili
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
知识覆盖  基本程序设计技术,递归程序设计,程序结构,文件,结构体,类型定义 实验内容 1.分别调试课件中的给定n求Fibonacci(n)递归与非递归函数,并编写测试函数对两种或多种不同方法所需时间进行比较,且当某一轮计算所需时间超过给定最大时间量时(如超过10秒),停止计算。计算过程中要求输出类似如下格式的运行时间比较表(请用实际运行时间代替***): n 非递归法耗时(ms) 递归法耗时(ms) 1 *** *** 2 *** *** … x *** *** 提示:计时方法请参见参考书或课件。 2.统计给定的一组文本文件的英文单词、字符、数字字符、空白字符、英文字母和其他字符的个数请你扮演项目组程序员角色,认真阅读CodeForLab6.cpp和CodeForLab6.h中的开发要求,按照项目经理要求,完成规划好的各个函数。 1)请参看文档:实验6结构说明.pptx,理解CodeForLab6.h中的两个结构体类型。并请在实验报告中说明typedef的作用。 2)阅读函数AllocateSpaceForTextFilesInfo,查阅资料并在实验报告中说明函数malloc的具体功能。 3)阅读函数CountWordsOfEuropeanTxtFile,画出该函数流程图,查阅资料并在实验报告中说明其中的函数fopen或fclose的具体功能。 4)阅读CodeForLab6.cpp的各个函数的功能说明,补全代码实现如下各个函数的功能: PrepareBasicInfoOfFiles CountWordsInOneLine CountFilesInfo CountDifferentCharactersInFile, TestCountFilesInfo 5)调用TestCountFilesInfo验证各功能正确性 6)阅读函数ExportFilesInfoToWebPage,查阅资料并在实验报告中说明函数fprintf的功能。 7)(自选题)查阅资料自学一些网页格式,尝试修改ExportFilesInfoToWebPage,以使输出内容更为丰富多彩或个性,如点击文件名能打开实验数据文件,再如加入一些其他链接,如程序员的个人主页等。 注意: 1)请将CodeForLab6.cpp和CodeForLab6.h文件添加到你的工程中; 2)测试数据至少应包括DataForLab6.rar中的4个文本文件,建议再自编一些测试文件。 特别注意:请一定看清要求,做好准备,通过整理函数调用关系表理清程序框架,通过分析编写流程图理清每个函数的实现思路。 3. (自选题)编写程序,统计英文文件中的每个单词的出现次数(词频)。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值