zoukankan      html  css  js  c++  java
  • 递归调用

    一: 什么是递归调用?

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

    该算法分为两步执行:  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));
            }
        }
    }
  • 相关阅读:
    AtCoder Beginner Contest 167
    AtCoder Beginner Contest 166
    AtCoder Beginner Contest 165
    AtCoder Beginner Contest 164
    AtCoder Beginner Contest 163
    AtCoder Beginner Contest 162
    AtCoder Beginner Contest 161
    AtCoder Beginner Contest 160
    AtCoder Beginner Contest 159
    自定义Mybatis自动生成代码规则
  • 原文地址:https://www.cnblogs.com/TangPro/p/3180834.html
Copyright © 2011-2022 走看看