函数-递归
前言
在初学C语言函数章节时,相信很多小伙伴对于递归难以理解,那么今天就让我们探讨什么是递归和递归的应用。
一、什么是递归?
简单说程序调用自身的编程技巧叫递归。而所谓递归的可以生动形象理解为“传递”与“回归”。
从未知结果向内依次传递找到已知后向未知回归得到结果。
二、应用
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)厄密多项式
编写程序计算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);
}
总结
应用递归的问题还有许许多多,如:猴子吃桃,阶乘,帕斯卡三角......他们共同之处在递推规律,所以当问题和子问题具有递推关系时,递归一般可采用递归很方便的解决。