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_流苏

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

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


目录
相关文章
|
4月前
|
安全 编译器 C语言
C++入门1——从C语言到C++的过渡
C++入门1——从C语言到C++的过渡
88 2
|
19天前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
52 16
|
23天前
|
存储 编译器 C语言
【C语言程序设计——入门】C语言入门与基础语法(头歌实践教学平台习题)【合集】
本文档介绍了C语言环境配置和编程任务,主要内容包括: - **C语言环境配置**:详细讲解了在Windows系统上配置C语言开发环境的步骤。 - **第1关:程序改错**:包含任务描述、相关知识(如头文件引用、基本语法规则)、编程要求、测试说明及通关代码。 - **第2关:scanf函数**:涉及`scanf`和`printf`函数的格式与使用方法,提供编程要求、测试说明及通关代码。 文档结构清晰,涵盖从环境搭建到具体编程任务的完整流程,适合初学者学习和实践。
42 4
|
23天前
|
C语言
【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
这份文档详细介绍了编程任务的多个关卡,涵盖C语言的基础知识和应用。主要内容包括: 1. **目录**:列出所有关卡,如`print函数操作`、`转义字符使用`、`数的向上取整`等。 2. **各关卡的任务描述**:明确每关的具体编程任务,例如使用`printf`函数输出特定字符串、实现向上取整功能等。 3. **相关知识**:提供完成任务所需的背景知识,如格式化输出、算术运算符、关系运算符等。 4. **编程要求**:给出具体的代码编写提示。 5. **测试说明**:包含预期输入输出,帮助验证程序正确性。 6. 文档通过逐步引导学习者掌握C语言的基本语法和常用函数,适合初学者练习编程技能。
35 1
|
2月前
|
存储 NoSQL 编译器
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
指针是一个变量,它存储另一个变量的内存地址。换句话说,指针“指向”存储在内存中的某个数据。
113 3
【C语言】指针的神秘探险:从入门到精通的奇幻之旅 !
|
4月前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
104 7
|
4月前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
58 2
|
4月前
|
存储 Java 编译器
初识C语言1——C语言入门介绍
初识C语言1——C语言入门介绍
48 1
|
4月前
|
C语言
c语言回顾-函数递归(下)
c语言回顾-函数递归(下)
63 0
|
4月前
|
C语言
回溯入门题,数据所有排列方式(c语言)
回溯入门题,数据所有排列方式(c语言)

热门文章

最新文章