五 函数(2)——函数递归

五.函数(2)——函数递归

原文地址:https://beryl-licorice-3a8.notion.site/2-024e7053e9e040feae48e95fb13b7164?pvs=4

1.递归是什么?

简而言之,函数递归就是函数自己调用自己,函数递归只是一种解决问题的办法

#include <stdio.h>
int main(){
   
	printf("hehe"\n);
	main();// main函数中又调用了main函数
	return 0;
}//这就是一个简单的递归,只不过没什么用

Stack Overflow - Where Developers Learn, Share, & Build Careers

递归的思想:

把一个大型复杂问题层层转化为一个与原问题类似、规模较小的子问题进行求解,直到子问题不能再被拆分 递归的思考方式就是把大事化小的过程

递归就是递推和回归,回归函数值,递推函数进行过程

2.递归的限制条件

  • 递归存在限制条件,满足这个条件,递归便不再进行下去。
  • 每次递归调用后,递推条件会逐渐逼近。

Eg: 求n的阶乘!

int fact(int n){
   
	int result = 0;
	if (n == 0) {
   
		result = 1;}
	else result = n * fact(n - 1);
	return result;
}
int main(){
   
	int n = 0;
	scanf("%d", &n);
	int result = fact(n);

	printf("%d ", result);
	return 0;}

这里我有几点想要强调:

  1. 定义函数的返回值最好只有一个,虽然有多个return更简洁,但不利于代码的逻辑性和查错能力。
  2. 思路是什么?

每一个数的的阶乘都是前一个数的阶乘与自己本身的乘积!

n*fact(n-1) 就是这个作用

  1. 注意理解回归和递推的作用!

下面来分析递推和回归的过程:

在这里插入图片描述

也就是思考的时候我们要逆向思考,就是要把递推到底的结果想象出来。然后回归就是逆向实现我们构造的递推的过程。

我们再来看一个稍难的例子:顺序输出输入的数字:

在这里插入图片描述


void Print(int n)
{
   
	if (n > 9)
	{
   
		Print(n / 10);
	}
	printf("%d",n%10);
}
int main()
{
   
	int n = 0;
	scanf("%d", &n);
	Print(n);}

这两个例子足够说明递推的思维!尤其是第二个例子,我们运用更

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值