C语言递归的理解与应用

函数-递归

文章目录


 前言

在初学C语言函数章节时,相信很多小伙伴对于递归难以理解,那么今天就让我们探讨什么是递归和递归的应用。

一、什么是递归?

简单说程序调用自身的编程技巧叫递归。而所谓递归的可以生动形象理解为“传递”与“回归”。

从未知结果向内依次传递找到已知后向未知回归得到结果。

二、应用7d958579338e46a78491e9e544efa2db.png

1.场景1-规律性强

典型案例 斐波那契额数列某一项:

此题规律性极强 直接找出相关关系表达式

第三天以后兔子数等于前两天之和 在fib()函数体内已知 fib(1)与fib(2),而其他未知。

这里使用递归

例如 当x传入8时return fib(7)+fib(6);反复调用fib()函数fib(7)=fib(6)+fib(5).....直到传递到fib(3)=fib(2)+fib(1),fib(3)变为已知。然后想所求项回归fib(4).fib(5)....直到fib(8)。

#include <stdio.h>
fib(x)
    {
    //情况1--当天数小于等于2时 兔子数均为1
	if(x<=2)
	return 1;
	else
    //情况2--天数大于2后 兔子数之和为前两天的和 	
	return fib(x-1)+fib(x-2);
	}
main()
	{
	printf("请输入一个数字:");
	int a,ret;
	scanf("%d",&a);
    //调用函数
	ret=fib(a);
	printf("第%d个斐波那契数为%d",a,ret);
	}

2.场景2-大型复杂问题

(Hermite polynomial)厄密多项式

e5951e55207441caac978295a8f4ea5e.jpeg

 编写程序计算Hn(x)的值

该场景看似复杂 但规律性很强 与场景一类似道理 使用递归 “传递”与“回归”。

#include<stdio.h>
int hermite(int n,int x)
{
//情况1
	if (n <=0)
		return 1;
//情况2
	if (n == 1)
	return 2*x;
//情况3 规律如图 显然按照表达式直接书写即可
	if (n >= 2)
		return 2 * x * hermite(n - 1, x) - 2 * (n - 1) * hermite(n - 2, x);
}
main()
{
	int a, b, c;
	scanf("%d%d", &a ,& b);
//引用函数
	c = hermite(a,b);
	printf("%d", c);

}

总结

应用递归的问题还有许许多多,如:猴子吃桃,阶乘,帕斯卡三角......他们共同之处在递推规律,所以当问题和子问题具有递推关系时,递归一般可采用递归很方便的解决。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值