递归算法介绍和使用

递归算法就是自身程序调用自身

递归算法程序需要有边界值条件,递归前进段,递归返回段。当边界条件不满足时,执行递归前进段;边界条件满足时,执行递归返回段。

在使用递归算法时,应该注意,程序必须有可能满足边界条件,必须要执行递归返回段;递归算法是将一个大问题分解成小问题,小问题的解可以结合成最终大问题的解。


递归算法实例:

fibonacci数列

斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)

代码实现:

int fibonacci(int num)
{
	if (num==0||num==1)
	{
		return 1;
	}
	else
	{
		return fibonacci(num-1)+fibonacci(num-2);
	}
}

在本例中,随着程序的运行过程为 f(5)--->f(4)+f(3)--->(f(3)+f(2))+f(3)--->(f(2)+f(1))+(f(1)+f(0))+(f(2)+f(1))--->>>>

会最终分解为多个f(0)和f(1)的函数,然后根据最后的边界值条件求的最终的值。


leetcode 中  50. Pow(x, n)

算法实现求方运算,就可以采用递归的算法。

double myPow(double x, int n)
{
	if (n==0)
	{
		return 1;
	}
	if (n<0)
	{
		if (n == INT_MIN)
			return 1.0 / (myPow(x,INT_MAX)*x);
		else
			return 1.0 / myPow(x, -n);
	}
	return x*myPow(x, n-1);
}


在实际问题中,如果遇到的问题可以分解,并且小问题也是大问题的重复,就可以考虑使用递归算法。

编写递归算法时,可以先考虑边界条件,边界条件确定好以后,一般满足边界条件的递归返回段会返回一个确定的数或者进行一次确定的操作(不会有自身函数出现)。边界条件确定好以后,继续编写递归前进段函数,一般返回的函数都与函数本身有关。

第一次写博客,希望大神们指正~





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值