递归就是自己调用自己
例:计算阶乘
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运行结果: