递归
- 我的递归理解很特殊
- 我把递归想象成在爬楼梯,调用一次自身相当于上一层楼梯
- 到了递归的出口了,也就是楼梯的最顶端,站的高看的远
- 再从上往下做路途上没有做完的事
- 还有一个梦境理解
- 一层递归相当于一层梦境
- 人从一层一层的梦境中醒来
- 做一层一层梦境中的事
- 递归的核心
- 1.有着相似的行为要完成(递归的代码块)
- 2.有明显的结束标志(递归的出口)
- 递归函数一般不可缺少参数,有的情况可以添加参数实现递归
第一个例子,递归输出0-9
//递归函数
void mRecursion( int mout ) //参数mout输出的值
{
if( mout == 0 ) return 0; //递归出口,输出的值为0不再递归,开始进行输出
mRecursion( mout-1 );
printf( "%d", mout );
}
int main()
{
int mmax = 9;
mRecursion( mmax );
return 0;
}
第二个例子,递归实现数组求和
注释的输出语句,输出每一步进行的运算
可以观察到上下楼梯的路
int sum = 0; //全局变量,统计和
//递归函数
int mRecursion( int mArray[], int begin, int end )
{
if( begin >= end ) {
if( begin == end ) sum = sum + mArray[begin]; //奇数项求和,计算中间项
return 0;
}
//printf("%d = %d + %d\n", sum+mArray[begin], sum, mArray[begin] );
sum = sum + mArray[begin];
mRecursion( mArray, begin+1, end-1 );
//printf("%d = %d + %d\n", sum+mArray[end], sum, mArray[end] );
sum = sum + mArray[end];
}
int main()
{
int mArray[11] = { 0,1,2,3,4,5,6,7,8,9,10 };
printf( "%d", mRecursion( mArray, 1, 10 ) );
//printf( "%d", mRecursion( mArray, 1, 9 ) );
return 0;
}