入门级递归算法心得

本文通过楼梯和梦境的比喻解析递归的概念,并提供两个实例:递归输出数字及数组求和,帮助读者深入理解递归的基本原理及其应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

递归

  • 我的递归理解很特殊
  • 我把递归想象成在爬楼梯,调用一次自身相当于上一层楼梯
  • 到了递归的出口了,也就是楼梯的最顶端,站的高看的远
  • 再从上往下做路途上没有做完的事
  • 还有一个梦境理解
  • 一层递归相当于一层梦境
  • 人从一层一层的梦境中醒来
  • 做一层一层梦境中的事
  • 递归的核心
  • 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值