【学习笔记之我要C】函数递归

简介: 【学习笔记之我要C】函数递归

一、函数递


程序调用自身的编程技巧称为递归(recurion);递归作为一种算法在程序设计语言中广泛应用.一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似但规模较小的问题来求解,递归策略只需少量的程序就可以描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。

 递归的主要思考方式在于:把大事化小

void print(unsigned int n) {
  if (n > 9) {
    print(n / 10);
  }
  printf("%d ", n % 10);
}
int main() {
  unsigned int num = 0;
  scanf("%u", &num);
  //递归 - 函数自己调用自己
  print(num);//print函数可以打印参数部分数字的每一位
  return 0;
}


24189703e3364e2cbc70ab488bae54f8.png

二、递归的必要条件

  1.存在限制条件,当满足这个条件的时候,递归不在继续;

  2.每次递归调用之后越来越接近这个限制条件。

  这是必要条件,但是不充分!如果递归太深,会导致栈溢出,程序就不能正常运行。

三、练习

//编写函数,不创建临时变量,求字符串的长度
int my_strlen(char* str) {
  if (*str != '\0')
    return 1 + my_strlen(str + 1);
  else
    return 0;
}
int main() {
  char arr[] = "dream";
  printf("%d\n", strlen(arr));
  //模拟实现一个strlen函数
  printf("%d\n", my_strlen(arr));
  return 0;
}
//求n的阶乘
int Fac(int x) {
  if (x <= 1)
    return 1;
  else
    return x * Fac(x - 1);
}
int main() {
  int n = 0;
  printf("请输入一个数:");
  scanf("%d", &n);
  int ret = Fac(n);
  printf("这个数的阶乘是:%d\n", ret);
  return 0;
}
//求第n个斐波那契数的值
int Fib(int x) {
  if (x <= 2)
    return 1;
  else
    return Fib(x - 1) + Fib(x - 2);
}
int main() {
  int n = 0;
  printf("请输入一个数:");
  scanf("%d", &n);
  int ret = Fib(n);
  printf("第%d个斐波那契数的值是:%d", n, ret);
  return 0;
}
目录
相关文章
|
算法
函数递归(详细解读)(上)
函数递归(详细解读)(上)
函数递归(详细解读)(下)
函数递归(详细解读)(下)
|
编译器
【函数和函数递归】
【函数和函数递归】
57 0
|
2月前
函数的递归
函数的递归
19 0
|
6月前
|
C语言
C语言函数递归详解:理解递归的原理与应用
C语言函数递归详解:理解递归的原理与应用
134 0
|
7月前
|
C语言
函数递归.
这篇内容介绍了递归的概念,指出在C语言中递归是函数自我调用。它通过一个简单的死递归示例展示了未设置停止条件会导致栈溢出。接着,文章阐述了递归的两个必要条件:存在限制条件以终止递归,以及每次递归调用都更接近这个限制条件。随后,文章通过计算阶乘和顺序打印整数位的例子展示了递归的应用,并对比了递归和迭代的效率,强调在存在冗余计算时,迭代通常比递归更高效。
37 0
|
7月前
|
机器学习/深度学习 算法
详解函数递归
详解函数递归
|
7月前
|
机器学习/深度学习 编译器 C语言
关于函数递归的基础
关于函数递归的基础
57 5
|
7月前
|
机器学习/深度学习
浅学函数递归
浅学函数递归
认识了解递归的原理,学会递归的运用
认识了解递归的原理,学会递归的运用