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

举报
Code_流苏 发表于 2022/04/17 12:57:54 2022/04/17
【摘要】 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_流苏
喜欢的话,关注一下,点个赞吧!
欢迎评论交流,如有错误,还请指正!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。