迭代与递归的小尝试

来源:互联网 发布:淘宝自定义图片尺寸 编辑:程序博客网 时间:2024/06/05 10:13

递归:程序调用本身,也就是函数自己去调用自己

当我们在说一个过程是递归的时候,也就是这个过程在定义的时候直接或者间接的调用了该过程的本身。

迭代:根据变量的规则计算得出新的一个值,也就是A不断去调用B的过程,这和递归自己调用自己不同。

递归中一定有迭代,而迭代中不一定有递归。

同时递归调用会浪费资源,递归得越深,越容易引起堆栈的泄漏。也就是能用迭代的函数就利用迭代,少用递归函数。


下面是关于阶乘的代码

//迭代方法long funA(int p){     for(int i=1;i<=p;i++) {     p=i*p; } return p;}//递归方法long fun(int p){if(p<=1) return 1;elsereturn p*fun(p-1);}


同样在对于斐波那契数列中

//迭代方法int Fib(int n){int a=1,b=0;int temp =0;for(int i=1;i<n;i++){temp=a;a=a+b;b=temp;}return a;}//递归方法int Fib2(int n){if(0==n)return 0;if(1==n)return 1;elsereturn Fib2(n-1)+Fib2(n-2);}

另外的类似斐波那契数列的一道题目:一个函数f(n),当n<=3时,f(n)=n;当n>3时,f(n)=f(n-1)+2f(n-2)+3f(n-3);

int f(int n){int a=3,b=2,c=1;int temp1,temp2;for(int i=4;i<=n;i++){temp1=a;temp2=b;a=a+2*b+3*c;b=temp1;c=temp2;}return a;}//递归方法int f2(int n){if(n<=3)return n;elsereturn (f2(n-1)+2*f2(n-2)+3*f2(n-3)); }

在用迭代找关系的时候可以列出f(4),f(5),用数学中的不完全归纳法找出变量的规则,但是要注意系数的问题。也就是应该检查一下关系式的正确与否。




原创粉丝点击