函数递归

函数递归

程序调用自身的编程技巧称为递归。递归做为一种算法,在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的主要思考方式在于:大事化小。

递归的两个必要条件:
1、存在限制条件,当满足这个限制条件时,递归便不再继续。
2、每次递归调用之后,越来越接近这个限制条件。

练习1:
接收一个无符号整型值,按顺序打印它的每一位。例如输入1234,打印出 1 2 3 4。

void print(int num)
{
	if(num > 9)
		print(num / 10);
	printf("%d ", num%10);
}

练习2:
求n的阶乘。

int test(int n)
{
	if(n <= 1)
		return 1;
	else
		return n*test(n-1);
}

练习3:
求第n个斐波那契数

int test(int n)
{
	 if(n<=2)
	 	return 1;
	return test(n-1)+test(n-2);
}

总结:
1、许多问题是以递归的形式进行解释的,这只是因为它比非递归形式更加清晰;
2、但这些问题的迭代实现往往比递归实现效率更高,虽然代码的可读性稍差;
3、当一个问题相当复杂,难以用迭代实现时,此时递归实现的简洁性便可以补偿它所消耗的时间。

你可能感兴趣的:(C/C++,数据结构及算法)