递归算法

递归由两部分组成,一部分是函数的描述,另一部分是函数终结的端口。(先看,后面会一下子感悟)

一个小栗子:计算1-100的相加之和。

分析下:我们来找函数描述:1+2+3+4······+n

我们再来找结束口 n=1;


#include

using namespace std;

int JC(int n);

int main(){

cout<

return 0;

}

int JC(int n){

int sum=0;

if(n==1){

return 1;//递归的出口


}

else

return JC(n-1)+n;//公式抽象::f(n)=f(n-1)+n

}

求数组的前n项和。 把一个数组看成两部分,比较两部分大小。然后寻找递归出口。最后肯定就是一位数

#include

using namespace std;

int sum(int*a,int n);

int main(){

    int a[]={1,2,3,8,7,6,2};

cout<

return 0;

}

int sum(int*a,int n){

if(n==0){

return a[0];//递归的出口,如果本身就一个则其本身就是最大值。

}

else

return sum(a,n-1)+a[n];

}

递归实现选出数组最大值。

#include

using namespace std;

int max(int*a,int n);

int main(){

    int a[]={1,2,3,8,7,6,2};

cout<

return 0;

}

int max(int*a,int n){

if(n==0){

return a[0];//递归的出口


}

else if(max(a,n-1)>a[n])

  return max(a,n-1);

else

    return a[n];

}

最后点下笔,理解递归,首先需要理解函数的嵌套调用,也就是理解一个函数调用另外一个函数的时候,系统做了什么。确切的说,运行栈的机制。

向一个玻璃杯里放乒乓球,放入1号再放入2号再放入3号,然后取出的顺序则为3,2,1,这种先进后出的数据结构即为栈。那递归与栈又又什么关系呢?其实递归函数就是在调用栈!

你可能感兴趣的:(递归算法)