科普博客---递归算法与递推算法的区别
说到递归算法与递推算法,大家应该都不陌生吧,但如果有人问你:“递归算法和递推算法的区别是什么,你能回答一下吗?”大部分人的回答应该是这样的:"递推算法是推导公式,而递归算法是函数自调用。"这样说虽然没错,但却并不严谨。
下面我就来科普一下递归算法和地推算法的区别:
1、算法的过程不同
递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。
递归算法在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。
2、递推与递归的比较相对于递归算法,递推算法免除了数据进出栈的过程,也就是说,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值.
3、两种算法用途不同
递归算法绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。
而递推算法是给定一个数的序列H0,H1,…,Hn,…若存在整数n0,使当n>n0时,可以用等号(或大于号、小于号)将Hn与其前面的某些项Hi(0<i<n)联系起来,这样的式子就叫做递推关系。
比方说最典型的fibonacci数列来讲,就可以用递推算法或递归算法两种算法来实现
递推算法fibonacci数列代码:
#include <bits/stdc++.h> #define ll long long using namespace std; ll fib[100]={0,1,2}; int main() { int n,i; scanf("%d",&n); for(i=3;i<=n;i++) { fib[i]=fib[i-1]+fib[i-2];//递推公式fib[i]=fib[i-1]+fib[i-2] } printf("%lld",fib[n]); return 0; }
递归算法fibonacci数列代码:
#include <bits/stdc++.h> using namespace std; int fib(int n) { if(n==1) return 1;//终止条件 else if(n==2) return 1;//终止条件 else return fib(n-1)+fib(n-2);//自调用 } int main() { int n; cin>>n; cout<<fib(n); return 0; }
以上便是递归算法和递推算法的一些基本区别,记得一定要把他们区分开