当前位置:首页 » 《随便一记》 » 正文

C | 函数递归_Ersansui的博客

5 人参与  2021年12月26日 08:53  分类 : 《随便一记》  评论

点击全文阅读


目录

    • 前言
    • 一、 函数递归
    • 二、 函数递归的条件
    • 三、函数递归的过程分析
    • 四、函数递归的例题
    • 结语

前言

生活中的问题是复杂多变的,有些问题看似复杂、繁琐、无从下手,但仔细分析,又会发现问题可以分解成为若干个小问题,而每一个小问题又有着相似之处,此时我们不妨想想能否用函数的递归来解决问题。

一、 函数递归

什么是函数递归(recursion)?

函数递归就是指函数直接或简洁调用自己的过程。

在这里插入图片描述

二、 函数递归的条件

如上图一可以看到,如果函数直接进行递归调用,那么调用过程就会一直进行下去,导致程序无法停止,这显然是不允许的,所以,函数的递归必须又限制条件。

1.有一个或多个终止状态,且存在限制条件,当条件满足终止状态时,必须停止递归。

2.限制条件必须在每一次递归调用后越来越接近终止状态。

总结起来就算是四个字:大事化小

如果以上条件不满足其中一个,而去使用递归的话,就会出现死递归。简称:“死龟”啦!
在这里插入图片描述

三、函数递归的过程分析

我们通过函数递归来计算给定正整数n的阶乘来分析。

补充:阶乘就是从1一直累乘n本身

即:1 * 2 * 3 * ……* n

我们通过代码和画图来分析

#include<stdio.h>
//定义一个用于递归的函数
int f(int n)
{
	if (1 == n)
		return 1;
	else
		return n * f(n - 1);
}

int main()
{
	int n = 0;
	int sum = 1;
	scanf("%d", &n);
	printf("%d", f(n));//将输入的n传入函数,并将函数的返回值打印出来
	return 0;
}

在这里插入图片描述

由此可见,函数递归,一定是要递归到函数不再满足递归的条件,才能使函数一步一步返回的

每一次调用函数,一定要等待下一次调用的函数返回并销毁后,该次调用的函数才会返回和销毁

若递归的次数过多,则会使程序效率变慢,甚至会因为压栈而造成程序异常

所以,虽然递归有时候解决问题很方便,但我们一i定要学会控制好递归的次数和条件。

四、函数递归的例题

用递归的方法打印一个整数的每一位

#include<stdio.h>

void f(int n)
{
	if (n > 9)
	{
		f(n / 10);//如果n有两位数字及以上,则调用f(n/10),再打印最后那一位数字。
	}
	printf("%d", n % 10);
}

int main()
{
	int n = 0;
	scanf("%d", &n);
	f(n);
	return 0;
}

到此,函数递归的内容也就结束啦,希望能够对同学们有所帮助。


结语

创作不易,希望大家可以点赞、评论、转发、关注一条龙哦!

你们的支持是我创作最大的动力!!

由于本人能力有限,若有错误,希望指正!!

如果有更好的方法或者想法,也欢迎再评论区留言哦~

在这里插入图片描述


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/32124.html

递归  函数  调用  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1