这两个概念其实应该从不同维度,或者说不同学科去理解应该比较好,我来为大家科普一下关于递推法和递归法?以下内容希望对你有帮助!

递推法和递归法(递推迭代递归)

递推法和递归法

这两个概念其实应该从不同维度,或者说不同学科去理解应该比较好。

1、递推:其对应英文应该是recurrence relation(Inductive),即递推关系。什么是递推关系呢?从数学角度,递推关系往往可以用数学公式来表示。比如,高中学的等比数列,a1=1, an=再比如fibonacci,Fn = Fn-1 Fn-2.递推可以理解是数学上的概念。从已知到未知, 从1 往 n推(未知)。

递进 依次 推算

2、递归:对应英文recursion,这是一个计算机科学里的概念,其定义为函数自己调用自己。计算机科学里除了递归,还有一个是迭代,它们和递推三者的关系,可以理解为:

在编程里,递推关系可以通过递归或者迭代来实现,但是递归和迭代又不仅仅只能用来实现递推关

从未知到已知 Recursive是从n(未知)往1推, 再层层返回

归纳

3.迭代(辗转) --Iterative 不断将结果当做变量带入,就叫迭代

迭代与递归: 1,从程序上看,递归表现为自己调用自己,迭代则没有这样的形式。 2,递归是从问题的最终目标出发,逐渐将复杂问题化为简单问题,最终求得问题 是逆向的。迭代是从简单问题出发,一步步的向前发展,最终求得问题。是正向的。 3,递归中,问题的n要求是计算之前就知道的,而迭代可以在计算中确定,不要求计算前就知道n。 4,一般来说,递推的效率高于递归(当然是递推可以计算的情况下)

递归:

int fib(int n){

if(n>1) return fib(n-1) fib(n-2);

else return n; // n = 0, 1时给出recursion终止条件

}

迭代:

int fib(int n){

int i, temp0, temp1, temp2;

if(n<=1) return n;

temp1 = 0;

temp2 = 1;

for(i = 2; i <= n; i ){

temp0 = temp1 temp2;

temp2 = temp1;

temp1 = temp0;

}

return temp0;

}

,