C语言递归在实践题目中应用详解

 更新时间:2022年05月12日 11:05:33   作者:珠江上  
递归是C语言中非常重要的知识点,其中的大事化小等思想对初学C语言的小伙伴来说不是很友好,因此我整理了递归的经典题目并向外拓展,给你全面的介绍,重新认识递归

递归知识点

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

通俗理解就是:函数自己调用自己

递归的主要思考方式就是大事化小

递归的两个必要条件

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

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

(满足以上必要条件的不一定是递归,但不满足条件的一定不是递归)

题目

第一题

接收一个整型数值,按照顺序打印它的每一位

输入:1234 输出:1 2 3 4

来看看函数内部:

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

第二题

求 n 的阶乘

进入函数内部:

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

第三题

用递归的方法求字符串长度

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

第四题

用递归求第n个斐波那契数(不考虑溢出)

进入函数内部:

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

第五题

进入函数内部:

#include <stdio.h>
int Dig(int n)
{
	if (n > 9)
		return Dig(n / 10) + n % 10;
	else
		return n;
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = Dig(n);
	printf("%d\n", ret);
	return 0;
}

第六题

用递归实现 n 的 k 次方

进入函数内部:

#include <stdio.h>
double Pow(int n, int k)
{
	if (k > 0)
		return n * Pow(n, k - 1);
	else if (k == 0)
		return 1;
	else
		return 1.0 / Pow(n, -k);
}
int main()
{
	int n = 0;
	int k = 0;
	scanf("%d %d", &n, &k);
	double ret = Pow(n, k);
	printf("%lf\n", ret);
	return 0;
}

第七题

小乐乐上课需要走 n 阶台阶,

所以每次可以选择走一阶或者走两阶,那么他一共有多少种走法?

进入函数内部:

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

到此这篇关于C语言递归在实践题目中应用详解的文章就介绍到这了,更多相关C语言递归内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于C语言 文件读写 feof 函数

    关于C语言 文件读写 feof 函数

    这篇文章主要给大家分享的是关于C语言文件读写 feof 函数 ,feof 是 C 语言标准库函数,其功能是检测文件结束符,如果文件结束,则返回非 0 值,否则返回 0,感兴趣的小伙伴请跟小编一起来看看下面文章的内容吧
    2021-10-10
  • 一文搞懂c++中的std::move函数

    一文搞懂c++中的std::move函数

    这篇文章主要介绍了c++中的std::move函数,在探讨c++11中的Move函数前,先介绍两个概念(左值和右值),对c++ std::move函数相关知识感兴趣的朋友一起看看吧
    2022-07-07
  • JetBrains CLion永久激活超详细教程(最新激活方法)

    JetBrains CLion永久激活超详细教程(最新激活方法)

    JetBrains Clion 是一款专为 C/C++ 开发所设计的跨平台 IDE,本文适用 JetBrains CLion v2019.3/3.1/3.2/3.3 永久激活,附破解补丁和激活码,可以永久激活 Windows、MAC、Linux 下的 CLion,下面给大家分享JetBrains CLion永久激活超详细教程,感兴趣的朋友一起看看吧
    2023-01-01
  • 老生常谈C++ explicit关键字

    老生常谈C++ explicit关键字

    这篇文章主要介绍了C++ explicit关键字,explicit关键字只需用于类内的单参数构造函数前面,由于无参数的构造函数和多参数的构造函数总是显式调用,这种情况在构造函数前加explicit无意义,需要的朋友可以参考下
    2023-03-03
  • C++类与对象深入之引用与内联函数与auto关键字及for循环详解

    C++类与对象深入之引用与内联函数与auto关键字及for循环详解

    朋友们好,这篇播客我们继续C++的初阶学习,现在对一些C++的入门知识做了些总结,整理出来一篇博客供我们一起复习和学习,如果文章中有理解不当的地方,还希望朋友们在评论区指出,我们相互学习,共同进步
    2022-06-06
  • Qt实现小功能之圆形进度条的方法详解

    Qt实现小功能之圆形进度条的方法详解

    在Qt自带的控件中,只有垂直进度条、水平进度条两种。在平时做页面开发时,有些时候会用到圆形进度条,比如说:下载某个文件的下载进度。本文就来实现一个圆形进度条,需要的可以参考一下
    2022-10-10
  • 深入uCOS中全局变量的使用详解

    深入uCOS中全局变量的使用详解

    本篇文章是对uCOS中全局变量的使用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 浅谈C++为什么非要引入那几种类型转换

    浅谈C++为什么非要引入那几种类型转换

    这篇文章主要介绍了C++为什么非要引入那几种类型转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • C/C++实现快速排序算法的两种方式实例

    C/C++实现快速排序算法的两种方式实例

    快速排序是一种采用分治思想,在实践中通常运行较快一种排序算法,这篇文章主要给大家介绍了关于C/C++实现快速排序的两种方式的相关资料,文中给出了详细的示例代码,需要的朋友可以参考下
    2021-08-08
  • 利用Matlab实现阴影柱状图的绘制

    利用Matlab实现阴影柱状图的绘制

    阴影柱状图绘制的代码MATHWORKS上也有,不过是生成图片后,识别图像上不同颜色块并直接修改像素生成阴影线。这样的生成方式不可逆且自由度较低,所以本文为大家带来的是一个直接画线条填充的硬画版本,希望有所帮助
    2022-09-09

最新评论