-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.
第一:
递归概述
? 递归是一种强有力的程序设计方法
? 递归的本质为函数内部在适当的时候调用自身
? 递归的本质为函数内部在适当的时候调用自身
递归函数
C 递归函数有两个主要的组成部分 :
递 归 点 点 – 以不同参数调用 自身
出 口– 不在递 归
1; x=1
f(x) =
x * f(x-1); x>1
利用递归函数求解n!
#include <stdio.h>
int func(int x)
{
if( x > 1 )
{
return x * func(x - 1);//递归点
}
else
{
return 1; //出口
}
}
int main()
{
printf("x! = %d\n", func(4));
return 0;
}
小结
? C 语言中的递 归 函数必 然 会使用判断语 句
? 递 归 函数在需要编写的时候定义函数的出 口 ,否则栈会 溢 出
? 递 归 函数是一种分而 治
--------------------------------------------------------------------------------------------------------------------------------------------
函数设计技巧
第一:
? 不要在函数中使用 全 局变量 , 尽 量 让 函数从 意 义上是一个独立 的功能 模块
? 参数名要能够体现参数的 意义
void str_copy(char *str1,char *str2);
void str_copy(char *str_dest,char *str_src);
第二:
? 如果参数是指 针 , 且仅 作 输入 参数用 , 则应 在类型前加const , 以 防止该 指 针 在函数体 内 被 意外修改
void str_copy(char *str_dest,const char *str_src);
第三:
? 不要省 略 返回值的类型 , 如果函数没有返回值 , 那么应声明 为void 类型
? 在函数体的“ 入口 处” , 对参数的有效性进 行 检查 , 对指 针 的 检查尤 为 重 要
? 语 句不可返回指向“ 栈 内 存” 的“ 指 针” , 因为 该内 存在函数体结 束 时被 自 动销
第四:
? 函数体的 规模 要 小 , 尽 量 控 制在80 行代码之 内
? 相同的 输入应 当 产生 相同的 输 出 , 尽 量 避免 函数 带 有“ 记忆” 功能
? 避免 函数有 太 多的参数 , 参数个数 尽 量 控 制在4 个以
第五:
? 有时候函数不需要返回值 , 但为了增加灵活性 , 如支持链式表达 , 可以附加返回值
char s[64];
int len = strlen(strcpy(s, “android”));
? 函数名与返回值类型在语义上不可冲突
char c;
c = getchar();
if(EOF == c) //错误,EOF没有发生过变化!!!
{
//…
}