首先迭代就是用旧值不断产生新值的过程:
int sum(int n )
{
int sum =0;
for(int i = 1 ; i <= n;i++) sum+=n;//求解1~n的和
return sum;
}
从上述例子中,从1一直加到n,每一次的和都是在上一次的和上加上n,因此,我们不难理解,所谓迭代法(辗转法),就是一种不断用变量的旧值递推新值的过程。
迭代的过程分为3步:
1、确定迭代变量,如上面所示的变量sum
2、确定迭代关系式
3、确定迭代终止的条件
递归
int sum(int n )
{
if(n==1) return 1;
else return n+sum(n-1);
}
递归就是在函数内部不断调用自身
同样是求0n的和,这段代码是每次在函数体中调用自身函数,1n的和可以拆分成两个部分,1~n-1的和加上n,因此,递归的思想就是:在函数或子过程的内部,直接或者间接地调用自己的算法,从而把问题转化为规模缩小了的同类问题的子问题。
递归也需要终止条件
递归的过程:
1、确定递归的表达式
2、确定递归出口,终止条件
迭代是一个正向思考的过程,递归像是一个由大到小的过程。
用递归还是迭代?
显然递归如果写成代码,会比较简洁,但是递归的深度过大,会导致堆栈溢出,迭代虽然可读性可能不如递归但是它的执行效率高,正比于循环次数