【C语言】——函数--递归及习题练习

简介: 【C语言】——函数--递归及习题练习

12f05cdc224442cdb6991aedea61ee14.png089c21b6e6ec4658848c0c01bfd1a476.png今天是在b站跟着bit鹏哥学习C语言的第15天,今天将学习了函数的最后一小节递归;以及函数调用,递归的练习题;

一,函数递归

什么是递归?、

简单来说就是函数自己调用自己;

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

递归的两个必要条件

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

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

就简单的递归(虽然是递归但是是一种错误的写法)

int main()
{
  printf("haha\n");
  main();
  return 0;
}

089c21b6e6ec4658848c0c01bfd1a476.png

这样会造成Stack overflow(栈溢出

d50337b6d8374f63834c6d75fe560d0a.png

什么是栈溢出呢?

我们把内存分为三个部分:栈区,堆区,静态区;

栈区里面存放局部变量和函数形参;堆区里面是内存分配;静态区里面放全局变量和静态变量;

函数每一次调用都会在栈区开辟一块新的空间;当函数调用结束是会清空开辟的空间;栈区是有限的;所以会形成上面的Stack overflow(栈溢出);

二,函数递归练习

接受一个整形,按照顺序打印它的每一位。例如:输入1234,输出1 2 3 4.

void print(int n)
{
  if (n > 9)
  {
    print(n/10);
  }
  printf("%d ", n % 10);
}
#include <stdio.h>
int main()
{
  int num = 0;
  scanf("%d", &num);
  print(num);
  return 0;
}


5335b75b9fcc44de8f663c11c4606e3f.png

求字符串长度 例如:bit的长度为3

int my_strlen(char* str)
{
  if (*str != '\0')
  {
    return 1 + my_strlen(str + 1);
  }
  else
    return 0;
}
#include <stdio.h>
int main()
{
  char arr[] = "bit";
  printf("%d \n", my_strlen(arr));
  return 0;
}


12f05cdc224442cdb6991aedea61ee14.png

打印n的阶乘

int f(int n)
{
  if (n <= 1)
  {
    return 1;
  }
  else
    return n* f(n-1);
}
#include <stdio.h>
int main()
{
  int n = 0;
  scanf("%d", &n);
  printf("%d ", f(n));
  return 0;
}


be0278cb09034e8b9778e2a650ff7d08.png

相关文章
|
10天前
|
C语言 C++
C语言 之 内存函数
C语言 之 内存函数
25 3
|
1天前
|
存储 缓存 C语言
【c语言】简单的算术操作符、输入输出函数
本文介绍了C语言中的算术操作符、赋值操作符、单目操作符以及输入输出函数 `printf` 和 `scanf` 的基本用法。算术操作符包括加、减、乘、除和求余,其中除法和求余运算有特殊规则。赋值操作符用于给变量赋值,并支持复合赋值。单目操作符包括自增自减、正负号和强制类型转换。输入输出函数 `printf` 和 `scanf` 用于格式化输入和输出,支持多种占位符和格式控制。通过示例代码详细解释了这些操作符和函数的使用方法。
17 10
|
5天前
|
存储 编译器 C语言
C语言函数的定义与函数的声明的区别
C语言中,函数的定义包含函数的实现,即具体执行的代码块;而函数的声明仅描述函数的名称、返回类型和参数列表,用于告知编译器函数的存在,但不包含实现细节。声明通常放在头文件中,定义则在源文件中。
|
11天前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
27 2
|
10天前
|
C语言
C语言函数
C语言函数
10 0
|
11天前
|
C语言 C++
c语言回顾-内存操作函数
c语言回顾-内存操作函数
34 0
|
11天前
|
C语言
c语言回顾-函数递归(下)
c语言回顾-函数递归(下)
29 0
|
13天前
|
Serverless C语言
C语言函数基础
C语言函数基础
20 0
|
5月前
|
存储 C语言
C 语言函数完全指南:创建、调用、参数传递、返回值解析
函数是一段代码块,只有在被调用时才会运行。 您可以将数据(称为参数)传递给函数。 函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。
165 3
|
16天前
|
C语言
C语言函数返回值详解
本文详细解析了C语言中函数返回值的概念与应用。从函数的基本定义入手,深入探讨了不同类型返回值的作用及意义,并提供了实用的编程示例,帮助读者更好地理解和使用函数返回值。通过本文,你将掌握如何有效利用返回值优化代码结构与功能实现。