• 递归调用


    一: 什么是递归调用?

    在调用一个函数的过程中 又出现直接或间接调用该 函数本身 , 称为函数的递归调用

    该算法分为两步执行:  1:回推

                2:递推

    二: 举列     用递归方法求 n!

    分析:   n!  =  1    (n=0,1)

                    = n * (n-1)!    n>1


    C语言算法实现: 

     1 #include<stdio.h>
     2 int digui(int n)
     3 {
     4     int c; // c作为 存放  函数的返回值的变量
     5     if(n ==1||n ==0)
     6     {
     7         c =1;
     8     }
     9     else
    10     {
    11         c = n * digui(n-1);
    12     }
    13     return c;
    14 }
    15 void main()
    16 {
    17     int n ;
    18     printf("请输入一个整数:");
    19     scanf("%d",&n);
    20     printf("n! = %d",digui(n));
    21 }

    根据调试,可以得知该方法的具体调用全过程,以下简述:

    调用步骤为:  假设输入一个整数为:5

    以下过程为  回推

    则调用   digui(5),  此时转到  digui() 函数中执行

    1: 因为 n =5, 所以执行 c = n *digui(n-1),  此时  c = 5 * digui(4)

    2:执行digui(4) 函数,  此时 n =4 ,还是执行 c = n *digui(n-1),  此时 c = 4 * digui(3)

    同理...

    一直执行到 digui(1), 此时 n = 1,  将要执行 digui(1)函数,即 c = 1这句。  

    到此  回推过程完毕。   

    以下过程为  递推

    当知道 c =1后,  当n =2 时,  c = 2 * digui(1)   得出 c = 2(即是 digui(2) = 2);

    当n = 3时, c = 3* digui(2)   得出 c = 6 (即是 digui(3) = 6)

    同理...

    一直到 n = 5,   c = 5 * digui(4)   得出最终结果。  

    函数结束。

    具体流程,  调试一遍便知

    附: C#实现

    namespace digui
    {
        class Program
        {
            public static  int Factorial(int n)
            {
                if (n == 1)
                {
                    return 1;
                }
                else
                {
                    return n * Factorial(n - 1);
                }
            }
    
            static void Main(string[] args)
            {
                Console.Write("请输入n的值:");
                int n = Convert.ToInt32(Console.ReadLine());
                Console.WriteLine("n!={0}", Factorial(n));
            }
        }
    }
  • 相关阅读:
    ueditor单独调用图片上传
    百度Ueditor多图片上传控件
    linux基础之vim编辑器
    linux基础之进阶命令二
    linux基础之基础命令一
    Python基础之PyCharm快捷键大全
    IT菜鸟之VTP应用项目
    IT菜鸟之总结(Du teacher)
    IT菜鸟之DHCP
    IT菜鸟之路由器基础配置(静态、动态、默认路由)
  • 原文地址:https://www.cnblogs.com/TangPro/p/3180834.html
Copyright © 2020-2023  润新知