既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
示例:递归求N的阶乘
public static void main(String[] args) {
int n = 5;
int ret = factor(n);
System.out.println("ret = " + ret);
}
public static int factor(int n) {
if (n == 1) {
return 1;
}
return n \* factor(n - 1); // factor 调用函数自身
}
// 执行结果
ret = 120
二、什么场景下能用递归?
a.一个大问题(这个方法的功能)可以拆分成若干个子问题的解.
b.拆分后的子问题和原问题除了数据规模不同,解决思路完全相同.
c.必须存在递归的终止条件(不会无限拆分下去,一定能走到底~).
(看不懂先看下面(●ˇ∀ˇ●))
三、如何写出递归代码(重点)?
1.先考虑这个函数的终止条件
比如上面的栗子:求N的阶乘。
拿求5的阶乘做例子:
我们把大问题(5的阶乘)一直拆分到1的时候,问题无法继续拆分下去了,这个子问题就是这个递归的最终条件。
所以我们写代码的时候,可以先把最终条件写上:
if (n == 1) {
return 1;
}
2.假设这个函数已经写好了(注意这个方法的语义)
在写递归函数的时候,千万不要纠结这个函数内部是如何实现的,而是要注意这个函数有什么功能(假设这个函数别人已经写好了),我们把它当作一个黑盒子,你只是去调用这个函数罢了。
public static int factor(int n)
比如这个函数只能传入一个n,目前我们只能知道这个n是多少,而n的阶乘等于n* [(n-1)!],但是我们并不知道n-1的阶乘是多少,那么就调用这个别人写好的“黑盒子”。这个黑盒子的功能可以实现某个数的阶乘。
n \* factor(n - 1) // n\*黑盒子
说白了就是,把这个factor函数当作别人已经写好了,你只需要关注如何去调用这个方法去辅助你解决问题就可以了!
总结
写出递归其实=终止条件+利用黑盒子去解决剩下的问题,注意传入的参数就可以很快把递归代码写出来(●ˇ∀ˇ●)。老铁们如果有帮助的话记得三连哟~
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**