递归学习心得:

递归即是该函数调用它本身自己,这种调用过程称为递归。
递归可以相当于循环,所以想结束递归,就必须有终止递归的条件测试部分,否则就会出现无限递归(即无限循环)。

递归就是某过程以某种方式重复出现,很多“计算”也以某种方式重复出现。

例如:

数学归纳法中的递归:证明一个与自然数n有关的命题P(n),有如下步骤:
(1)证明当n取第一个值n0时命题成立(n0对于一般数列取值为0或1)
(2)假设当n=k(k≥n0,k为自然数)时命题成立,证明当n=k+1时命题也成立。

递归(优缺点)与循环
使用循环的地方都可以使用递归
缺点:
递归快速耗内存
不方便阅读和维护
效率低
优点:
简洁
适合解决阶乘、涉及相反顺序的编程问题

函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用该函数本身,称为函数的递归调用。

递归有直接递归和间接递归

用递归法求解问题时的方法:

列出递归方程/思路
写出递归函数
调用递归函数

递归经典的问题汉诺塔问题

程序设计分析:用f(n, a, b, c)表示要求解的问题,其含义是有a、b、c三根棒和n只盘,且这n个盘叠放在a棒上,依次叠放为大盘在下,小盘在上。借助b棒将n只盘从a棒移到c棒上。每次只移一个盘,在移动时保持大盘在下,小盘在上。

这个问题理解的时候对我来说还是挺有难度的
预处理学习总结
预处理是指在系统对源程序进行编译之前,对程序中某些特殊的命令行的处理,预处理程序将根据源代码中的预处理命令修改程序。使用预处理功能可以改善程序的设计环境,提高程序的通用性、可读性、可修改性、可调试性、可移植性和方便性,易于模块化。

C语言中以符号"#"开头的命令
(1)宏定义:#define...
(2)文件包含:#include...
(3)条件编译:#ifdef...

宏定义

宏就是替换,其分两类:简单的字符替换和带参数的宏替换。

宏定义语法:#define 标识符字符串
应用法则:原样替换
典型应用:符号常量
典型错误:#definePI3.1415926;

带参数的宏定义
语法:#define宏名(参数表)字符串
例如
#defineS(a,b)a*b,其中a、b为宏的参数

“文件包含”处理
所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来。

“文件包含”命令的作用:
“文件包含”命令可以节省程序设计人员的重复劳动
将常用的一组固定常量的定义组成一个文件——方便,易修改
库函数的开发者将对被调用的函数的原型声明写入头文件,程序员只需
要#include<头文件>——大大简化了程序
一行#include,相当于写几十、几百,甚至更多行的内容
“文件包含”是模块化程序设计的产物
便于多个程序员分别编程
将公用的符号常量或宏定义等可单独组成一个文件,在其它文件的开头
用包含命令包含该文件即可使用
公用的声明只写一次,除节省时间,更可观的是减少出错

格式1:#include文件名

格式2:#include"文件名"

(2)功能:用指定的文件名的内容代替预处理命令。

(3)两种格式的区别:

格式1定义时,预处理程序在C语言编译系统定义的标准目录下查找指定的文件。

格式2定义时,预处理程序首先在引用被包含的头文件的源文件所在的目录中寻找指定的文件,如没找到,再按系统指定的标准目录查找。

为了提高预处理程序的搜索效率,通常对用户自定义的非标准文件使用格式2,对使用系统库函数等标准文件使用格式1.

条件编译
一般情况下,在进行编译时对源程序中的每一行都要编译。
条件编译:希望根据需要只编译程序中某一部分
条件编译命令常用在对程序的调试中。

条件编译的常用形式之一
//define标识符
#ifdef标识符
程序段1
#else
程序段2
#endif

当所指定的标识符已经被#define
命令定义过,则在程序编译阶段
只编译程序段1,否则编译程序段
2。#endif用来限定#ifdef命令
的范围,其中#else部分也可以没
有。

#ifndef标识符
程序段1
#else
程序段2
#endif

条件编译的常用形式之二

#if常量表达式
程序段1
#else
程序段2
#endif

如常量表达式的值为真(非
0),则对程序段1进行编译,
否则对程序段2进行编译。因
此可以使程序在不同条件下,
完成不同的功能。

转载于:https://www.cnblogs.com/Abreast-/p/7860189.html

递归函数和预处理学习总结相关推荐

  1. 文本预处理学习(2)

    R包之tm:文本挖掘包 原文地址:  http://www.bagualu.net/wordpress/archives/6112 简介 安装 数据输入-文集(corpus) 数据输出 查看语料库(c ...

  2. 《HALCON机器视觉与算法原理编程实践》第5章 图像预处理-学习笔记

    文章目录 5.1 图像变换与校正 5.1.1 二维图像的平移.旋转和缩放 5.1.2 图像的仿射变换 5.1.3 投影变换 5.1.4 实例:透视性变图像校正 5.2 感兴趣区域(ROI) 5.2.1 ...

  3. Python数据预处理:机器学习、人工智能通用技术(1)

    1 什么是数据预处理 数据预处理简而言之就是将原始数据装进一个预处理的黑匣子之后,产生出高质量数据用来适应相关技术或者算法模型.为了大家更明确的了解数据预处理,我们举个新闻分类的例子: 将原始的数据直 ...

  4. java递归函数例子_Java递归函数详解附案例

    递归函数在Java语言中得到了广泛的应用,它使得程序的编写过程更加的清晰明了.对Java初学者来讲,递归函数是需要学习的一个重要知识点.本文将附上案例和演示代码,具体为大家介绍递归函数的概念.要素以及 ...

  5. 关于递归函数转换为非递归函数的一些方式

    关于递归函数转换非递归函数的一些方式 前言 目的 可行性 转换的几种途径 转换示例 第一个例子:阶乘n! 第二个例子:菲波那契数列 效率的比较 1.阶乘三种方式函数的执行效率比较 2.Fibonacc ...

  6. C语言及程序设计(公开课)主页

    本课程由烟台大学计算机学院贺利坚老师建设. 本主页提供各节课程中的源码,以及配套的实践. 程序设计的学习,必须要通过实践,才能够得到真正的思维训练,获得解决问题的能力. 第1章 引言及体验 1.1 人 ...

  7. 可能存在无限递归_无限分类递归+排序解剖

    首先我们先了解一下递归函数: 递归函数在语言学习的时候会单独拿出来学习,因为它非常常用,本质上来讲递归函数就是调用自己的函数. 举个例子: test函数里面又再调用了自身,这就是俗称的递归函数!递归函 ...

  8. php 操作xls,php中使用PHPExcel操作excel(xls)文件

    PHPExcel是php的一个插件,它可以实现读取excel文件也就是xls文件了,下面我们就来看一个PHPExcel操作excel(xls)文件例子,希望能帮助到各位. 读取中文的xls.csv文件 ...

  9. Halcon入门教程手册

    Halcom安装方法 Halcon下载连接 大恒图像为Halcon国内唯一代理商,需要购买正版联系大恒图像销售人员 一.Halcon软件界面介绍 二.Halcon自带例程,这里有大量识别检测程序案例 ...

最新文章

  1. html5 上传超大文件,HTML5教程 如何拖拽上传大文件
  2. java设计模式3--单例模式(Singleton)
  3. python实现提取jira bug列表
  4. Scanner类的简单用法介绍!
  5. 反垃圾邮件,需要全面了解各种方案
  6. Predator:比微软Kinect更强的视频追踪算法-来自捷克博士论文
  7. cisco交换机堆叠
  8. 聊聊编程那些破事-0.Prehistory
  9. B1.Java基础部分一
  10. 【Flink】Flink Committing offsets to Kafka takes longer than the checkpoint interval
  11. 数组在内存中存储方式
  12. 一台机器上同时部署多个tomcat服务
  13. Operations Manager 2007 R2系列之单台服务器拓扑图监控
  14. STM32F107+LAN8720A使用STM32cubeMX配置网络连接+tcp主从机+UDP app
  15. ubuntu使用教程
  16. 终南山--SpringBoot系列之Spring Data Jpa连表查询和分页
  17. GAE(Generalized Advantage Estimation) PPO
  18. PHP: Fatal error:Call to undefined function com_create_guid()
  19. 线性代数 | (4) n维向量
  20. T1076 正常血压(信息学一本通C++)

热门文章

  1. Windows Server 2012 R2工作文件夹⑤:创建工作文件夹
  2. 所有顶点对最短路径问题(图的应用)
  3. Java调用ocx控件以及dll
  4. 今天看了一下攒机配置 5000元以下 参考以下
  5. 常见拒绝服务***行为特征与防御方法
  6. 如何使用Lombok来优雅的编码
  7. js用.和[]获取属性的区别
  8. PHPStorm+XDebug进行调试
  9. 第19/24周 锁升级(Lock Escalations)
  10. axis1 web Service 环境部署