算法精解:C语言描述(递归)

算法精解真的是一本不错的书,虽然我真的不是很喜欢看书,但是不知不觉间就看完了6单元。里面对每一模块的具体代码实现和分析,写的非常透彻。初入CSDN,也是决定要好好学习一波,自此开始好好记录自己学习的一步步脚印和一次次的失败。不知道能坚持多久,但希望能久一些。

1.递归的认知。

  不知大佬对递归的理解是如何的,在我看来递归像是一个悠悠球。当达到某个临界点时,在原路返回。

  其实悠悠球就是递归的方法,而悠悠球的线就是递归方法实现。而线越长(方法实现越差),球从扔出到回来的时间越长(递归实现的优劣)。可能理解的较为粗糙。但是我喜欢将学的东西具现化。

程序运行就是最显著的递归表现,A->B->C->B->A。

例:

A()
{
    printf("A");
    B();
    printf("A2");
}

B()
{
    printf("B");
    C();
    printf("B2")
}

C()
{
    printf("C");
}


//输出结果为:
ABCB2A2

2.递归三要素

1、明确递归终止条件; 2、给出递归终止时的处理办法; 3、提取重复的逻辑,缩小问题规模。

3.递归的简单实例

3-1以递归的方式计算阶乘的函数实现

//以递归的方式计算阶乘的函数实现
int fact(int n)
{
    if(n < 0)
        return 0;
    else if(n == 0)
        return 1;
    else if(n == 1)
        return 1;
    else
        return n * fact(n-1);
}

 3-2尾递归

//如果一个函数中所有递归形式的调用都出现在函数的末尾,我们称这个递归函数是尾递归的。
int facttail(int n,int a) //a的初始值为1
{
    if(n < 0)
        return 0;
    else if(n == 0)
        return 1;
    else if(n == 1)
        return a;
    else
        return facttail(n-1,n*a);
}

猜你喜欢

转载自blog.csdn.net/qq_32579021/article/details/83074363