秦皇岛海港区建设局网站,上海大型网站开发公司,新艾尚网站建设推广,西安网站建设收费标准递归函数#xff08;递去、回归#xff09;是函数不断的调用自己#xff1b;
可以按照如下来理解#xff1a;func1中调用func2#xff0c;func2中调用func3;
func3函数返回了#xff0c;继续执行func2中的语句#xff1b;func2执行完了#xff0c;继续执行func1之后的…递归函数递去、回归是函数不断的调用自己
可以按照如下来理解func1中调用func2func2中调用func3;
func3函数返回了继续执行func2中的语句func2执行完了继续执行func1之后的语句fun1执行结束。
void func3()
{printf(this is func3\n);return;
}
void func2()
{func3();printf(this is func2\n);return;
}
void func1()
{func2();printf(this is func1\n);return;
}
int main()
{func1();return 0;
} 从上图中可以看出最后调用的函数先执行完也是递归中回归的过程即this is func3先打印输出。
递归算法英语recursion algorithm是指一种通过重复将问题分解为同类的子问题而解决问题的方法。 递归的三要素 1.明确函数的功能 2.递归的结束条件 3.函数的等价关系 接下来利用n nn阶乘来讲解这三个条件 任何大于等于1 的自然数n nn阶乘表示方法 n ! n × ( n − 1 ) ! ( n 1 ) 0 ! 1 ( n 0 ) n!n \times(n-1)! \quad (n 1) \\ 0! 1 \quad (n 0) n!n×(n−1)!(n1) 0!1(n0)
1.1明确函数的功能 明确我们要写的函数的功能是实现n nn的阶乘定义函数如下
// 定义n阶乘函数 public int factorial(int n){ } 1.2递归的结束条件 由阶乘的表示方法可以看出当n 0 n 0n0时是阶乘的最小值此时结束继续往下计算阶乘可以把n 0 n 0n0当做递归的结束条件。同样当n 1 n 1n1时1 ! 1 1! 11!1也可以作为递归的结束条件。
// 定义n阶乘函数 public Integer factorial(int n){ // 递归的结束条件 if (n 1) return 1; } 1.3函数的等价关系 第三要素就是我们要不断缩小参数的范围缩小之后我们可以通过一些辅助的变量或者操作使原函数的结果不变。 由阶乘的表达式可以看出n nn的阶乘与n − 1 n -1n−1阶乘存在的关系式为n ! n × ( n − 1 ) ! ( n 1 ) n!n \times(n-1)! \quad (n 1)n!n×(n−1)!(n1)若已知n − 1 n -1n−1的阶乘记为f ( n − 1 ) f(n - 1)f(n−1)则当前的n nn的阶乘可以记为f ( n ) n × f ( n − 1 ) ( n 1 ) f(n) n \times f(n -1)\quad (n 1)f(n)n×f(n−1)(n1) 综上递归的三个要素可以得出求n nn阶乘的递归函数为
// 定义n阶乘函数 public Integer factorial(int n){ // 递归的结束条件 if (n 1) return 1; return n * factorial(n - 1); } ———————————————— 原文链接https://blog.csdn.net/qq_38670588/article/details/108206613