C语言入门——递归(思想简要讲解+简单递归练习)

简介: C语言入门——递归(思想简要讲解+简单递归练习)

C语言入门——递归(简要讲解+递归练习)

递归定义:

程序调用自身的编程技巧称为递归( recursion)。

递归从字面上我们可以理解为:

递去+归来 如下图

使用递归的目的

简要:简化代码量,方便运算

递归的优缺点:

优点:

递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量

简要:代码量少

缺点:

递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。

简要:运行效率低

在简单地了解递归之后,我们来看一下一些递归练习题加深理解:

1.斐波那契数列

波那契数列(Fibonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……

数学递推表示:F*(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

核心代码突破点:F*(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

问题:求第n项斐波那契数列

输入:输入一个整数n,代表斐波那契数列的第n项(0≤n≤20)

输出:输出一个整数,代表斐波那契数列第n项值

样例:

输入:3

输出:2

递归实现:

#include <stdio.h>
int fibonacci(int n)
{
  if(n <= 2)
  {
    return 1;
  }
  else
  {
      return fibonacci(n - 1) + fibonacci(n - 2);
    }
}
int main()
{
  int n;//第n项 
  scanf("%d", &n);
  printf("%d\n", fibonacci(n));//第n项斐波那契数列的值 
  return 0;
}

自然也可以借助循环等实现,在这就不在多加陈述。

2.求n的阶乘

一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。

核心代码突破点:

大于等于

任何大于等于1 的自然数n 阶乘表示方法:

n!=1×2×3×…×(n-1)×n

n!=n×(n-1)!

0的阶乘

0!=1。

问题:求n的阶乘

输入:输入一个整数n(0≤n≤10)

输出:输出一个数,表示n的阶乘

样例:

输入:5

输出:120

#include <stdio.h>
int Fact(int n)//递归函数 
{
  if( n <= 1)
  {
    return 1;
  }
  return n * Fact(n - 1);
}
int main()//主函数 
{
  int n;//阶乘数 
  scanf("%d", &n);
  printf("%d\n", Fact(n));
  return 0;
}

3.打印一个整数每一位

问题:输出一个整数的每一位

输入:输入一个整数a(大小在int数据范围内)

输出:输出每一位并用空格隔开

样例:

输入:13579

输出:1 3 5 7 9

#include <stdio.h>
void Prt(int a)//递归函数 
{
  if(a > 9)
    Prt(a / 10);   //单个语句将{}省略
  printf("%d ", a % 10);
}
int main()//主函数 
{
  int a ;
​    scanf("%d",&a);
​    Prt(a);
​ printf("\n");
​ return 0;
}


关于递归就先说到这里,希望这篇文章能对你有所帮助!

作者:code_流苏

喜欢的话,关注一下,点个赞吧!

欢迎评论交流,如有错误,还请指正!


目录
相关文章
|
1月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
52 2
|
3月前
|
机器学习/深度学习 C语言
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
【8月更文挑战第5天】本篇文章用C语言采用多文件编写实现了一个基础的扫雷游戏(附源码),并讲解了关于函数递归的基础概念及其相对应的习题练习(附源码)
41 1
九/十:《初学C语言》— 扫雷游戏实现和函数递归基础
|
25天前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
53 7
|
1月前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
31 2
|
1月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
30 1
|
1月前
|
C语言
c语言回顾-函数递归(下)
c语言回顾-函数递归(下)
37 0
|
1月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)
|
3月前
|
C语言
C语言------程设设计入门
这篇文章是C语言程序设计的入门教程,涵盖了C程序的实现过程、VC集成开发环境的使用、基本数据类型的使用、格式控制字符的作用,以及通过示例代码演示了如何使用printf()函数输出不同类型的数据。
C语言------程设设计入门
|
3月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
76 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
3月前
|
C语言
C语言中的递归
C语言中的递归