第36节 函数递归与函数设计技巧

-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.

第一:

递归概述

? 递归是一种强有力的程序设计方法
? 递归的本质为函数内部在适当的时候调用自身

? 递归的本质为函数内部在适当的时候调用自身

 

递归函数

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没有发生过变化!!!
  {
       //…
  }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值