##递归算法
1.什么是递归算法?
程序直接或间接的调用自生的编程技巧。 (Recursion)(即“传递”与“回归”)
2.递归的三要素
(1)递归的终止条件:递归需有去有回,则递归终止条件就是传递的临界点,即到达了这个临界点,传递停止,开始回归。(防止无限递归)
(2)递归终止时的处理办法:对传递到临界点时给出解决问题的方案。
(3)找逻辑,缩小规模:递归是将问题分解为若干个规模较小、与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决。(即f(n)与f(n-1)的关联。)
递归的关键在于找出递归的定义和递归终止条件!!
3.递归算法解题通常有三个步骤
a.分析问题,寻找递归:找出大规模问题与小规模问题之间的关系。(即找f(n)与f(n-1)的关系)
b.设置边界,控制递归:找终止条件。
c.设计函数,确定参数:设计函数体中的操作及相关参数。
##通过学习递归之后:解决了如:阶乘、全排序、求解最大公约数、斐波那契数列等问题。
列:给定两个正整数,求他们的最大公因数
int g(int a,int b) //求解最大公约数的函数,a,b为传入的数需a>b;
{
if(a%b==0) return b; //返回最大公约数;(也为递归结束的临界点)
else return g(b,a%b); //递归调用自己 ;
}
斐波那契数列
int fbnq(int n) //求斐波那契数列的函数,有一个参数,及所求第几项;
{
if(n==0||n==1)
return n; //第一项的值为1;
else return fbnq(n-1)+fbnq(n-2);//递归调用自己:关系为f(n)=f(n-1)+f(n-2);
}
##学后感想
通过这一周的学习感觉自己对递归的理解还不是很透彻,自己不足的地方还有很多,不过我相信通过以后的学习以及练习一定会熟悉递归算法以及更多的算法。
通过之后的学习,期待能解决跟多的问题!