理解递归掌握递归

递归的原理

递归递归,字面意思就是递和归,递也就是你一直传递数据,归就是传递到最后返回的过程,这样说太抽象,先上一个代码在解释。

#include<stdio.h>
int Pnx(int a[], int x, int n, int i);
int main()
{
	int a[5] = { 1,2,3,4};
	printf("%d\n", Pnx(a,1,3,3));
	return 0;
}
int Pnx(int a[], int x, int n, int i)
{
	if (i > 0)
		return a[n - i] + Pnx(a, x, n, i - 1)*x;
	else
		return a[n];
}

代码要计算的是Pnx的值,公式如下
在这里插入图片描述
为了方便解释,我上面a的长度写的很短,现在我用图来说明代码的递归过程(有点潦草,见谅)
在这里插入图片描述
因为是手写的,没有电脑制作看着方便,我解释一下上面的过程。
递归,首先是递的过程,在这个过程中,你必须要给一个出口,告诉系统到什么地方,递的过程才结束,我这个代码中,递的过程到i<0时结束,所以一旦i<0递就结束了,接下来就是归的过程,他会把最后一个数据返回到上一个数据,然后依次返回,直到第一个数据,归的过程也结束了,这时候系统就得到递归的结果。
在写递归函数的过程中,出口和入口都是必不可少的,要想用法递归,你需要把握2个方面
1.规律:一般来说简单的就是从头到尾,还是从尾到头,复杂的就具体情况,具体分析
2.出口:根据规律来设置,我这个代码是简单的从头到尾,所以出口是最后一个数据
我这举一个例子,大家都熟悉的斐波拉契数列,他的规律很简单
在这里插入图片描述
显然,你找不到斐波拉契数列的最后一个数据,所以他采用从尾到头的方式来计算,如果假设f(0)=0(实际也是0),那么斐波拉契前面的数据就是0,1,1,2,3,5…
代码如下

int Fibonacci(int n)
{
	if (n == 0)
		return 0;
	else if (n == 1)
		return 1;
	else
	{
		return Fibonacci(n - 1) + Fibonacci(n - 2);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值