C语言学习笔记--递归函数

Posted CrazyDiode

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言学习笔记--递归函数相关的知识,希望对你有一定的参考价值。

1. 递归函数的思想

(1)递归是一种数学上分而自治的思想,是将大型复杂问题转化为与原问题相同但规模较小的问题进行处理的一种方法

(2)递归需要有边界条件

    ①当边界条件不满足时,递归继续进行

    ②当边界条件满足时,递归停止

2. 递归函数

(1)递归函数的函数体内部存在自我调用

(3)递归函数是递归的数学思想在程序设计中的应用。必须有递归出口,无限递归将导致程序栈溢出而崩溃。

3. 递归函数设计技巧

(1)递归模型的一般表示法

4. 递归函数设计实例

(1)用递归的方法编写函数求字符串长度

#include <stdio.h>

int my_strlen(const char* s)
{
    if(*s)
    {
        return 1 + my_strlen(s + 1);
    }
    else 
        return 0;
}

int main()
{
    printf("%d\\n", my_strlen("abc"));
    return 0;
}

(2)斐波那契数列递归解法

#include <stdio.h>

int fac(int n)
{
    if (n == 1)
    {
        return 1;
    }
    else if (n == 2)
    {
        return 1;
    }
    else
    {
        return fac(n - 1) + fac(n - 2);
    }
}

int main()
{
    printf("%d\\n",fac(1));
    printf("%d\\n",fac(2));
    printf("%d\\n",fac(5));

    return 0;
}

(3)汉诺塔问题

    ①需求描述

I、将木块借助 B 柱由 A 柱移动到 C 柱

II、每次只能移动一个木块

III、只能出现小木块在大木块之上

    ②问题分解

I、将 n-1 个木块借助 C 柱由 A 柱移动到 B 柱

II、将最底层的唯一木块直接移动到 C 柱

III、将 n-1 个木块借助 A 柱由 B 柱移动到 C 柱

#include <stdio.h>

void han_move(int n, char a, char b, char c)
{
    if (n == 1)
    {
         printf("%c --> %c\\n", a, c);
    }
    else
    {
        han_move(n -1,a, c, b);
        han_move(1, a, b, c);
        han_move(n -1, b, a, c); 
    }
}

int main()
{

    han_move(3, \'a\', \'b\', \'c\');

    return 0;
}

递归是一种将问题分而自治的思想,用递归解决问题首先要建立递归的模型。

 

参考资料:
www.dt4sw.com
http://www.cnblogs.com/5iedu/category/804081.html

以上是关于C语言学习笔记--递归函数的主要内容,如果未能解决你的问题,请参考以下文章

C语言学习笔记函数

C语言学习笔记--递归函数

python学习笔记day3基础/函数/变量/递归

C语言 编写递归函数

C语言详解:函数递归专题

Linux C编程一站式学习笔记5