c语言递归入门

void print(unsigned int num);


int main()
{
    unsigned int a = 0;

scanf("%d",&a) ;
    print(a);



    return 0;
}

void print(unsigned int num)
{
    if(num>9){


        print(num/10);
    }
printf("%d ",num % 10 ) ;

这段代码是实现将输入的int类型数字按位打印出来。

一个简单的递归。递归一般要满足两个条件才能使用
//1.存在限制条件 :当满足这个限制条件的时候,递归便不再继续
//2.每次递归调用之后越来越接近这个限制条件。否则会死循环,导致栈溢出 stack overflow等问题。
//比如咱们这里这个print函数,限制条件是num<=9。每次递归调用之后,num/10,直到num<=9,然后就会打印。
//让原数据更加接近限制条件的规则,就写在递归函数里面。这样才会在递归中不断接近目标。

递归貌似看起来很高大上,实则不然。

用不好容易栈溢出。而且一般会占用大量性能。

好处:

  1. 简洁性和可读性:递归通常能够更直观地表达问题的解决方法,使得代码更加简洁易懂。对于一些数学问题、树结构和分治算法等,递归可以提供更自然的解决方案。

  2. 问题分解:递归可以将问题分解成更小的子问题,使得问题的解决变得更加简单和清晰。这种问题分解的方法有助于管理复杂性,并且可以提高代码的可维护性。

  3. 适用性广泛:递归是一种通用的编程技术,在许多领域都有应用。它可以用于树和图的遍历、动态规划、搜索算法等多种场景。

坏处:

  1. 性能开销:递归调用会在栈上创建多个函数调用的栈帧,而且可能会导致栈溢出。相比之下,迭代通常只需要一个或几个变量来保存状态,因此性能开销较低。

  2. 复杂度分析:递归的时间和空间复杂度分析通常比较复杂。递归函数的时间复杂度可能不容易直观地确定,而且递归调用的空间复杂度也可能比较高。

  3. 潜在的无限循环:如果递归函数没有正确的终止条件,可能会导致无限递归调用,最终导致栈溢出。因此,编写递归函数时需要特别小心,确保有正确的终止条件。

总的来说,递归是一种非常有用的编程技术,但需要谨慎使用。在一些情况下,递归可以提供简洁、清晰的解决方案;但在另一些情况下,迭代可能更加适合,能够提供更好的性能和可控性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值