zoukankan      html  css  js  c++  java
  • 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
    ", 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
    ",fac(1));
        printf("%d
    ",fac(2));
        printf("%d
    ",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
    ", 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

  • 相关阅读:
    二叉搜索树的后序遍历序列(python)
    从上往下打印二叉树(python)
    仿 PS中的颜色填充工具
    噪点图
    另一种噪点图 (有点类似卫星云图)
    像素融解
    比较位图差异
    颜色变换
    像素拷贝及赋值
    使用(模糊)滤镜
  • 原文地址:https://www.cnblogs.com/CoderTian/p/5915071.html
Copyright © 2011-2022 走看看