黑马程序员---递归
来源:互联网 发布:ping ip地址加端口号 编辑:程序博客网 时间:2024/06/10 12:03
public class digui{ public static void main(String[] args) { System.out.println(method(3)); } public static int method(int n) { if(n == 1) return 1; else return n*method(n-1); }}
递归就是 方法调用自身的方法
上面代码递归执行原理:进入main函数,调用method方法
method(3) 把3传递给mthod方法的行参n,3不等1 执行else
等着 3*method(3-1) 返回 在这当中回调用 method(2)
接着还是调用method本身的方法 把2传递给行参n 2不等于1 执行else 2*method(2-1)
等着 2*method(2-1) 返回 在这当中又调用了 method(1)
1==1 method(1) 返回,1
method(2) 返回,2
method(3) 返回,3 结果1*2*3=method(3) 运算结果是:6
main函数继续往下执行.程序结束.
/*
递归调用指在方法执行过程中出现该方法本身的调用
例如: 求数列 1,1,2,3,5,8,.....第40个数的值. 数列满足递归推公式
F1 =1 , F2 =2 Fn = Fn-1 +Fn-2 (n>2)
*/
/*递归调用指在方法执行过程中出现该方法本身的调用例如: 求数列 1,1,2,3,5,8,.....第40个数的值. 数列满足递归推公式F1 =1 , F2 =2 Fn = Fn-1 +Fn-2 (n>2)*/public class DiGui{public static void main(String[] args){System.out.println(f(5));}public static int f(int n){if(n == 1 || n == 2){return 1;}else{return f(n-1) +f(n-2);}}}
递归执行顺序图:
非递归 计算:
/*
例如: 求数列 1,1,2,3,5,8,.....第40个数的值.
*/
public class DiGui{public static void main(String[] args){ System.out.println(f(5));}public static long f(int index){if(index == 1 || index == 2){return 1;}//用3个变量记录前3个数的值long f1=1L;long f2=1L;long f=0; //前5个数相加,遍历3次即可for(int i=0; i<index-2; ++i){//前3个数相加f=f1+f2;//第2个数赋给第一个位置f1=f2;//第3个数赋给第二个位置f2=f;}return f;}}
- 黑马程序员:递归
- 黑马程序员-递归
- 黑马程序员---递归
- 黑马程序员_递归
- 黑马程序员 — 递归
- 黑马程序员-递归
- 黑马程序员-递归思想
- 黑马程序员------递归解析
- 黑马程序员_递归
- 黑马程序员:递归
- 黑马程序员---递归小结
- 黑马程序员 递归调用心得
- 黑马程序员-递归思想,汉罗塔
- 黑马程序员_File类、递归
- 黑马程序员_递归查询
- 黑马程序员 递归+IO总结
- 黑马程序员——递归
- 黑马程序员——递归
- phpmyadmin 错误 #2002 Cannot log in to the MySQL server
- 9,10 IP选路,动态选路
- Android意外情况(来电话,按Home键,内存不足)保存数据的方法
- Mobile's main Camera inverted and 3rd apk's main camera inverted issue
- SVM学习笔记(1)LIBSVM在matlab下的使用安装
- 黑马程序员---递归
- 全国计算机等级考试二级C语言之指针测试
- 在Windows Server 2003 32bit 中安装Oracle 11g 32bit
- Android通过PHP连接MySQL(读取)
- ios开发学习之旅day1
- 强力提高 android 4 编译效率(c,c++部分)
- POJ 1844 Sum
- [C/C++] 第15章:面向对象编程 《 C++ Primer 》
- TreeView控件应用(包含递归调用)