算法学习——递归
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习——递归相关的知识,希望对你有一定的参考价值。
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。
一般来说 ,能够用到递归解决的问题应该满足以下三个条件:
(1)待解决的问题可以转化为一个或多个子问题来求解,而这些子问题的求解方法与原问题相同,只是在数量规模上会有所不同;
(2)递归调用的次数必须是有限的;
(3)必须有结束递归的条件来终止递归。
以下是一些用到递归的简单实例:
eg_Fibonacci数列:
int Fib(int n) { if(n==1||n==2) return (1); else return(Fib(n-1)+Fib(n-2)); }
eg_阶乘:
int fun(int n) { if(n==1) return (1); else return (fun(n-1)*n); }
eg_汉诺塔问题:
void Hanoi(int n,char X,char Y,char Z) { if(n==1) printf("\t将第%d个盘片从%c移动到%c\n",n,X,Z); else { Hanoi(n-1,X,Y,Z); printf("\t将第%d个盘片从%c移动到%c\n",n,X,Z); Hanoi(n-1,Y,X,Z); } }
递归一定程度上精简了代码,可将复杂的问题转换得很简单,但同样地,它让程序的效率变得低下(特别是在数据量大的时候)。
不管怎样,递归在算法中占有及其重要的地位,很多排序中用到它,例如快速排序,归并排序等等常见问题……
以上是关于算法学习——递归的主要内容,如果未能解决你的问题,请参考以下文章