【学习笔记之我要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;
}
目录
相关文章
|
7月前
函数递归(详细解读)(下)
函数递归(详细解读)(下)
|
7月前
|
算法
函数递归(详细解读)(上)
函数递归(详细解读)(上)
|
7月前
|
编译器
【函数和函数递归】
【函数和函数递归】
38 0
|
6天前
|
机器学习/深度学习 算法
详解函数递归
详解函数递归
|
6天前
|
机器学习/深度学习 编译器 C语言
关于函数递归的基础
关于函数递归的基础
34 5
|
10月前
|
算法 C语言
函数的递归
当我们在生活中遇到一个复杂问题时,我们会想方设法将其解决,这时我们会有很多种方法,我们可以将问题一步一步顺序化,也可以使用逆向思维将其巧妙化解。C语言中就给我们提供了一种将问题大事化小思想——递归。
54 0
|
算法 程序员 编译器
【C】掌握函数基本知识+理解函数递归
【C】掌握函数基本知识+理解函数递归
75 0
【C】掌握函数基本知识+理解函数递归
|
算法 程序员 编译器
|
Java Scala 开发者
函数递归的课堂练习|学习笔记
快速学习函数递归的课堂练习。
58 0
|
Shell
shell编程之函数以及函数中的递归(上)
在编写脚本时,有些脚本可以反复使用,可以调用函数来解决。 语句块定义成函数约等于别名。 函数的作用: 使用函数可以避免代码重复; 使用函数可以将一个大的工程分割为若干小的功能模块,代码的可读性更强。 函数的使用方法: 先定义函数 再引用函数
152 0