递归:
将问题规模为n的问题,降解成若干个规模为n-1的问题,依次降解,直到问题规模可求,求出低阶规模的解,代入高阶问题中,直至求出规模为n的问题的解。
递推:
构造低阶的规模(如规模为i,一般i=0)的问题,并求出解,推导出问题规模为i+1的问题以及解,依次推到规模为n的问题。
显然能用递推的话就用递推, 一般肯定要比递归快,除非有的问题不用递归做不出来的.
关于递推,最经典的递推肯定就是斐波那契序列,接下来基本上都是斐波那契序列的变式。
伪代码如下
float fibonacci(int n)
{
if(n==1)
return 1;
if(n==2)
return 1;
return fibonacci(n-1)+fibonacci(n-2);
}
关于递归
最经典的就是计算阶乘问题啦
计算阶乘,就是从1到指定数之间的所有自然数相乘的结果,n的阶乘为:
n! = n*(n-1)*(n-2)*.......*2*1;
代码:
int fact(int n){
if(n <= 1)
return n;
else
return n*fact(n-1);
}
总的而言,递归递推是相当有用的思想,而且代码也相对简单,但是思考的时候很难想,就是一句话,要找规律,找出规律来,你就能AC了。