c语言函数的递归调用是什么,c语言递归函数详解

  c语言函数的递归调用是什么,c语言递归函数详解

  首先,什么是递归

  调用程序本身的编程技巧叫做递归。作为一种算法,递归在编程语言中被广泛使用。一个过程或函数在其定义或描述中有一个直接或间接调用自身的方法。它通常将一个大而复杂的问题逐层转化为一个与原问题相似的更小的问题来解决。递归策略只需要少量的程序来描述解题过程中所需的重复计算,大大减少了程序的代码量。考虑递归的主要方法是最小化大的东西。

  递归的两个必要条件:

  有一个约束,当这个约束满足时,递归就不会继续。

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

  int main()

  printf(呵呵\ n );

  main();

  返回0;

  }

  该函数调用自己,并不断打印“呵呵”但程序会在一会儿停止自己。这不是真正的递归,而是无限循环(递归的两个条件不满足)

  递归实现:接收一个整数值(无符号)并按顺序打印它的每一位。例如:输入:1234,输出:4321

  作废打印(无符号整数)

  如果(n ^ 9)

  打印(n/10);

  printf(%d ,n % 10);

  int main()

  无符号int num=0;

  scanf(%u ,编号);

  //递归——函数调用自身。

  打印(数字);

  返回0;

  }

  的基本实现逻辑如图所示:

  ![image . png](https://s 2.51 CTO . com/images/20220425/1650890354614516 . png?x-oss-process=image/watermark,size_14,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_30,g_se,x_10,y_10,shadow_20,type _ zmfuz 3 poz w5 nagvpdgk=/resize,m_fixed,w_750)

  nbsp

  编写递归代码时要注意:

  1.你不能死递归,有跳出条件,每个递归都接近跳出条件。

  2.递归层次不能太深(可能会发生堆栈溢出)

  # #二。递归和迭代

  求第n个斐波那契数,(可以递归或迭代实现)(不考虑溢出)

  我们知道这样一个数列:1,1,2,3,5,8,13,21,34 …这样第n个数等于第n-1个数加上第n-2个数之和就是* *斐波纳契数列* *

  -递归实现求斐波那契数,直接看代码:

  中间纤维(中间纤维)

  如果(n=2)

  返回1;

  其他

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

  int main()

  int n=0;

  scanf(%d ,

  int ret=Fib(n);

  printf(%d\n ,ret);

  返回0;

  }

  当我们找到一个小的斐波那契数时,计算机会快速计算。但是当我们要求一个很大的数时,比如第50个斐波那契数,计算机就要花很长时间(大约五分钟)。你可以试一试。

  为什么这么慢?因为递归实现效率太低,要重复很多计算(计算层次太多)。

  代码实现的基本逻辑如图所示:

  我们可以看看在代码的计算过程中,步骤n=3(计算第三个斐波那契数)要执行的次数:

  在计算第四十个斐波那契数时,需要计算第三个斐波那契数超过3000万次。可想而知递归实现的效率有多低。而且计算量太大会导致程序崩溃。

  迭代实现求斐波那契数,直接看代码:

  中间纤维(中间纤维)

  int a=1;

  int b=1;

  int c=1;

  当(n 2)

  c=a b;

  a=b;

  b=c;

  n-;

  返回c;

  int main()

  int n=0;

  scanf(%d ,

  int ret=Fib(n);

  printf(%d\n ,ret);

  返回0;

  }

  迭代计算速度快。

  提示:

  很多问题都是用迭代的形式来解释的,只是因为它比非递归的形式更清晰。

  然而,许多问题的迭代实现往往不如递归实现高效。虽然代码的可读性稍微差一些。

  当问题相当复杂,难以用迭代实现时,递归实现的简单性可以补偿运行成本。

  第三,典型的递归问题

  有兴趣的可以了解一下:

  河内塔问题,青蛙跳台阶问题

  这些都是典型的递归问题。

郑重声明:本文由网友发布,不代表盛行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算法之图的遍历
  • 留言与评论(共有 条评论)
       
    验证码: