c语言函数定义格式,c语言函数调用

  c语言函数定义格式,c语言函数调用

  第一篇前言。函数的声明和定义。函数声明2。函数的定义。函数递归1。什么是递归?2.递归的两个必要条件3。练习1。练习1: 2。练习2 4。递归和迭代3。练习3 4。概要介绍本文主要介绍函数的声明和定义,以及函数递归最重要的部分。

  提示:以下是本文的主要内容,以下案例可供参考。

  一、函数的声明和定义1。函数声明告诉编译器什么是被调用的函数,它的参数是什么,它的返回类型是什么。但它具体存在吗,功能?

  无法发表声明。函数的声明通常出现在函数使用之前。符合要求的,使用前申报。函数声明通常应该放在头文件中。功能的定义是指功能的具体实现和功能的功能实现。

  测试内容

  放置函数的声明。

  //函数声明

  int Add(int x,int y);测试内容

  布局功能的实现

  #包含“test.h”

  //函数Add的实现

  int Add(int x,int y) {

  返回x y;}二。函数递归1。什么是递归?调用程序本身的编程技巧叫做递归。

  作为一种算法,递归在编程语言中被广泛使用。过程或功能被直接或间接定义或解释。

  打电话给你自己

  一种方法,通常将一个大而复杂的问题逐层转化为一个与原问题相似的较小问题来求解,

  递归策略

  只需要少量的程序来描述解题过程中所需的重复计算,大大减少了程序的代码量。

  考虑递归的主要方法是最小化大的东西。

  2.递归的两个必要条件是有限制的。当满足这个限制时,递归将不再继续。

  每次递归调用后,它越来越接近这个限制。

  3.练习1。练习1:接受一个整数值(无符号)并按顺序打印它的每一位。

  例如:

  输入:1 2 3 4,输出1234

  //函数的递归

  //输入1234打印1 2 3 4

  作废打印(无符号long long n) {

  如果(n ^ 9)

  {

  打印(n/10);

  }

  printf(“% d ,n”);

  }

  //打印(1234)

  //print(123) 4

  //print(12) 3 4

  //print(1) 2 3 4

  //1 2 3 4

  int main() {

  无符号long long num=0;

  scanf(%d ,编号);

  打印(数字);//接受整数值(无符号)并按顺序打印它的每一位

  返回0;

  }

  2.练习2编写函数不允许创建临时变量。求绳子的长度。

  //查找字符串的长度

  int my_strlen(char* str) {

  int count=0;

  while (*str!=\0)

  {

  数数;

  str//查找下一个字符

  }

  返回计数;

  }

  //递归求解

  int my_strlen(char* str) {

  if (*str!=\0)

  返回1 my _ strlen(str 1);

  其他

  返回0;

  }

  int main() {

  char arr[]= ABC ;

  int len=strlen(arr);

  printf(%d\n ,len);

  my _ strlen(arr);

  返回0;

  }

  4.递归和迭代3。练习3求n的阶乘。(不考虑溢出)

  递归解

  //int my_strlen(char* str) {

  //

  //if (*str!=\0)

  //返回1 my _ strlen(str 1);

  //否则

  //返回0;

  //}

  //

  //int main() {

  //char arr[]= ABC ;

  //int len=strlen(arr);

  //printf(%d\n ,len);

  //my _ strlen(arr);

  //返回0;

  //}

  4.练习4找出第n个斐波那契数列。(不考虑溢出)

  //找到第n个斐波那契数

  //斐波那契数列

  //1 1 2 3 5 8 13 21 34 55 .

  int count=0;

  int Fib(int n) {

  //递归

  /*if (n==3)

  数数;

  如果(n=2)

  {

  返回1;

  }

  其他

  {

  返回光纤(n - 1)光纤(n-2);

  }*/

  //非递归

  int a=1;

  int b=1;

  int c=1;

  而(n=3)

  {

  c=a b;

  a=b;

  b=c;

  n-;

  }

  返回c;

  }

  int main() {

  int n=0;

  scanf(%d ,n);

  int sum=Fib(n);

  printf(%d\n ,sum);

  返回0;

  }

  但是我们发现了一个问题;

  在使用函数fib时,如果要计算第50个斐波那契数,就要花很多时间。

  用阶乘函数求10000的阶乘(不管结果是否正确),程序会崩溃。

  为什么?

  我们发现很多fib函数的计算其实一直在重复。

  如果我们修改代码:

  int count=0;

  int Fib(int n) {

  //递归

  如果(n==3)

  数数;

  如果(n=2)

  {

  返回1;

  }

  其他

  {

  返回光纤(n - 1)光纤(n-2);

  }

  }

  int main() {

  int n=0;

  scanf(%d ,n);

  int sum=Fib(n);

  printf(count=%d\n ,计数);

  printf(sum=%d\n ,sum);

  返回0;

  }

  光是计算第n个斐波那契数,在n=3的情况下就会被调用近千万次。

  调试阶乘函数时,如果n足够大,就会报错:堆栈溢出等信息。

  系统分配给程序的堆栈空间是有限的,但是如果存在无限循环,或者(无限递归),这可能会导致

  打开堆栈空间最终会导致堆栈空间的耗尽,这就是所谓的堆栈溢出。

  解决办法

  将递归重写为非递归。使用静态对象代替非静态局部对象。在递归函数的设计中,可以用静态对象代替非静态局部对象(即堆栈对象),这样不仅可以减少每次递归调用和返回时生成和释放非静态对象的开销,还可以保存递归调用的中间状态,并且可以被所有调用层访问。很多总结题都是用递归形式解释的,只是因为它比非递归形式更清晰。然而,这些问题的迭代实现通常比递归实现更有效,尽管代码的可读性稍差。当问题太复杂而不能迭代实现时,递归实现的简单性可以补偿运行时开销。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • 详解c语言中的字符串数组是什么,详解c语言中的字符串数组结构,详解C语言中的字符串数组
  • 表达式求值c++实现,c语言实现表达式求值
  • 看懂c语言基本语法,C语言详解,C语言的基本语法详解
  • 用c语言实现快速排序算法,排序算法设计与实现快速排序C语言,C语言实现快速排序算法实例
  • 深入解析c语言中函数指针的定义与使用方法,深入解析c语言中函数指针的定义与使用情况,深入解析C语言中函数指针的定义与使用
  • 描述E-R图,E-R图举例,关于C语言中E-R图的详解
  • 折半查找法C语言,折半查找算法(算法设计题)
  • 折半查找法C语言,c语言折半法查找数据,C语言实现折半查找法(二分法)
  • 扫雷小游戏c++代码设计,c语言扫雷游戏源代码,C语言实现扫雷小游戏详细代码
  • 怎样统计程序代码行数,C语言统计行数,C#程序员统计自己的代码行数
  • 基于c语言的贪吃蛇游戏程序设计,用c语言编写贪吃蛇游戏程序,C语言实现简单的贪吃蛇游戏
  • 图的两种遍历算法,图的遍历算法代码c语言,Python算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: