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

  • 相关阅读:
    搜索回车跳转页面
    登录验证码
    【排序算法】排序算法之插入排序
    PAT 乙级 1044 火星数字 (20 分)
    PAT 甲级 1035 Password (20 分)
    PAT 甲级 1041 Be Unique (20 分)
    PAT 甲级 1054 The Dominant Color (20 分)
    PAT 甲级 1027 Colors in Mars (20 分)
    PAT 甲级 1083 List Grades (25 分)
    PAT 甲级 1005 Spell It Right (20 分)
  • 原文地址:https://www.cnblogs.com/CoderTian/p/5915071.html
Copyright © 2011-2022 走看看