博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言中的预处理指令和递归
阅读量:5239 次
发布时间:2019-06-14

本文共 1552 字,大约阅读时间需要 5 分钟。

 

                C语言中的预处理指令和递归

 

预处理指令:是在编译器把代码编译成0跟1之前就会执行的一些指令。所有的预处理指令都是以#开头的。

  预处理指令分为三种:

  1.宏定义

    用法--如:#define MYINT  int   表示把右边的int 在本代码以下的代码中的int都用MYINT代替,#define是固定写法,MYINT是代替名(宏名),可以随便取名但是宏名一般都以都用大写,或者以k开头。int是被代替者,它可以是数值,任意数据类型,

  2.条件编译

    类似于if语句,如果满足条件就变异以下代码,如果不满足就不进行这段代码的编译。一般情况下原程序中的所有的代码都要进行编译,但有时希望对其中一部分内容只在满足一定条件下才进行编译。即对一部分内容指定编译条件。

    格式:#if(条件)

        语句;

       #elif(条件)  

        语句;

       #else 

        语句;

       #endif--->一定要写,表示结束条件编译!

  3.文件包含

    分两种:一种是‘包含文件目录’,在安装编译软件时,在安装目录下生成的一些目录。大多数会有一个include目录,该目录下是存放编译器提供的头文件。也就是属于系统文件。用法是:#include <包含文件>

        另一种是‘源文件目录’:就是在你编写的程序所存放的目录,即自己写的文件。用法:#include “源文件”

    文件包含的作用:就是将#include后面的文件里内容拷贝到当前文件!

递归----就是指函数自己调用自己

  能采用递归描述的算法通常有这样的特征:为求解规模为N的问题,设法将它分解成规模较小的问题,然后从这些小问题的解方便地构造出大问题的解,并且这些规模较小的问题也能采用同样的分解和综合方法,分解成规模更小的问题,并从这些更小问题的解构造出规模较大问题的解。特别地,当规模N=1时,能直接得解。在开发时尽量不要使用递归,代码后期难以维护。

 

执行过程:递归算法的执行过程分递推和回归两个阶段。在递推阶段,把较复杂的问题(规模为n)的求解推到比原问题简单一些的问题(规模小于n)的求解。例如上例中,求解fib(n),把它推到求解fib(n-1)和fib(n-2)。也就是说,为计算fib(n),必须先计算fib(n-1)和fib(n-2),而计算fib(n-1)和fib(n-2),又必须先计算fib(n-3)和fib(n-4)。依次类推,直至计算fib(1)和fib(0),分别能立即得到结果1和0。在递推阶段,必须要有终止递归的情况。例如在函数fib中,当n为1和0的情况。
在回归阶段,当获得最简单情况的解后,逐级返回,依次得到稍复杂问题的解,例如得到fib(1)和fib(0)后,返回得到fib(2)的结果,……,在得到了fib(n-1)和fib(n-2)的结果后,返回得到fib(n)的结果。
在编写递归函数时要注意,函数中的局部变量和参数只是局限于当前调用层,当递推进入“简单问题”层时,原来层次上的参数和局部变量便被隐蔽起来。在一系列“简单问题”层,它们各有自己的参数和局部变量。

 

作用:由于递归引起一系列的函数调用,并且可能会有一系列的重复计算,递归算法的执行效率相对较低。当某个递归算法能较方便地转换成递推算法时,通常按递推算法编写程序。例如上例计算斐波那契数列的第n项的函数fib(n)应采用递推算法,即从斐波那契数列的前两项出发,逐次由前两项计算出下一项,直至计算出要求的第n项。
 
 

转载于:https://www.cnblogs.com/jingdian/p/4296431.html

你可能感兴趣的文章
编程算法 - 左旋转字符串 代码(C)
查看>>
IOS解析XML
查看>>
Python3多线程爬取meizitu的图片
查看>>
树状数组及其他特别简单的扩展
查看>>
Linux vi/vim
查看>>
zookeeper适用场景:分布式锁实现
查看>>
110104_LC-Display(液晶显示屏)
查看>>
javascript全局变量
查看>>
全连接神经网络(DNN)
查看>>
httpd_Vhosts文件的配置
查看>>
php学习笔记
查看>>
28 hashlib 模块 logging 模块 和 configparser模块 functools模块的偏函数partial
查看>>
普通求素数和线性筛素数
查看>>
React Router 4.0 基本使用
查看>>
作业完成2
查看>>
PHP截取中英文混合字符
查看>>
HTA - OnKeyDown
查看>>
【洛谷P1816 忠诚】线段树
查看>>
CDN 学习笔记
查看>>
电子眼抓拍大解密
查看>>