C语言初步学习笔记——第六节 函数递归与迭代

函数递归

——程序调用自身

省略多次重复计算,减少代码量

递归而不是死循环的条件:


存在限制条件,当这个限制条件满足的时候,递归便不再继续

每次递归调用之后越来越接近这个限制条件

编程中常见错误(当没有限制条件,形成死循环时)

例如,如下程序就会报错——栈溢出

int max()
{
    printf("hehe\n");
    max();
    return 0;
}

进行的任何一次函数调用都会向内存申请空间。

C语言初步学习笔记——第六节 函数递归与迭代_第1张图片

 迭代

int fac(int n)
{
    if(n<=1)
        return 1;
    else 
        return n*fac(n-1);
}

但是,以上函数有一个问题:不符合单一出口原则

因此,可以改为:

int fac2(int n)
{
    int ret = 1;
    for (int i=1; i

那么何时用循环,何时用递归呢?

递归运用时要注意栈溢出问题(对函数的调用次数过多)

练习:汉诺塔   青蛙跳台阶

你可能感兴趣的:(弱小大学生为了不挂科的笔记,c语言)