6、递归

递归就是自己调用自己

例:计算阶乘

5!=5x4x3x2x1;

n!=n x (n-1)!;

5!=5 x 4!  ,算不出来先暂存

4!=4 x 3!  ,算不出来先暂存

3!=3 x 2!  ,算不出来先暂存

2!=2x 1!  ,算不出来先暂存

1!=1x 0!  ,算不出来先暂存

0!=1;算出来了往回推

1!=1 x 1=1;算出来了往回推

2!=2x 1!=2;算出来了往回推

3!=3 x 2!=6;算出来了往回推

4!=4 x 3!=24;算出来了往回推

5!=5 x 4!=5 x 24 =120;算出来了

 

任何能使用递归解决的问题都可以使用迭代实现

递归更好理解,但大量的递归调用会占用大量的内存空间和时间,

  1 #include<iostream>
  2 
  3 using namespace std;
  4 
  5 long jx(int n)
  6 {
  7 	if(n==0)
  8 		return 1;
  9 	else
 10 		return n*jx(n-1);
 11 }
 12 long jx2(int n)
 13 {
 14 	long result =1;
 15 	for(int i=n;i>0;i--)
 16 	{
 17 		result=result*i;
 18 	}
 19 	return result;
 20 }
 21 
 22 int main()
 23 {
 24 	for(int num=0;num<10;num++)
 25 	{
 26 		cout<<"递归:"<<num<<"!="<<jx(num)<<endl;
 27 		cout<<"迭代:"<<num<<"!="<<jx2(num)<<endl;
 28 
 29 	}
 30 
 31 	system("pause");
 32 	return 0;
 33 }
 34 
 35 

VS2010运行结果:

image

posted @ 2018-04-18 15:40  乱丶心  阅读(130)  评论(0编辑  收藏  举报