一: 什么是递归调用?
在调用一个函数的过程中 又出现直接或间接调用该 函数本身 , 称为函数的递归调用
该算法分为两步执行: 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)); } } }