做外贸的都有那些网站,软件开发 东莞,网站设置超链接,尚硅谷python基础教程方法递归
递归是一种算法 在程序设计语言中广泛应用.
从形式上来说#xff1a;方法调用自身的形式称为方法递归#xff08;recursion#xff09;.
递归的形式#xff1a;
直接递归#xff1a;方法调用自己。间接递归#xff1a;方法调用其他方法#xff0c;其他方法…方法递归
递归是一种算法 在程序设计语言中广泛应用.
从形式上来说方法调用自身的形式称为方法递归recursion.
递归的形式
直接递归方法调用自己。间接递归方法调用其他方法其他方法又回调方法自己。
//直接方法递归
public static void test1(){System.out.println(----test1----);test1();
}
//间接方法递归
public static void test2(){System.out.println(----test2----);test3();
}
public static void test3(){test2();
}使用方法递归时需要注意的问题
递归如果没有控制好终止会出现递归死循环导致栈内存溢出错误。
递归案例一-计算机n的阶乘
需求计算n的阶乘5的阶乘1x2x3x4x5;6的阶乘1x2x3x4x5x6;
分析
①假如我们存在一个公式是f(n)1x2x3x4x5x6x7…(n-1)*n;
②那么公式等价于f(n)f(n-1)*n;
③如果求的是1-5的阶乘的结果我们手工应该如何应用上述公式进行计算
f(5)f(4)x5;
f(4)f(3)x4;
f(3)f(2)x3;
f(2)f(1)x2
f(1)1;
public static int f(int n){if(n1){return 1;}else{return n*f(n-1);}
}递归算法三要素
递归的公式递归的终结点递归的方向必须走向总结点。
递归案例二-求1-n的和
需求计算n的阶乘1-5的和12345;1-6的和123456;
分析
①假如我们存在一个公式是f(n)1234567…(n-1)n;
②那么公式等价于f(n)f(n-1)n;
③如果求的是1-5的和的结果我们手工应该如何应用上述公式进行计算
f(5)f(4)5;
f(4)f(3)4;
f(3)f(2)3;
f(2)f(1)2
f(1)1;
public static int f(int n){if (n1){return 1;}return nf(n-1);
}递归案例三-猴子吃桃问题
问题描述猴子第一天摘下若干桃子当即吃了一半觉得好不过瘾于是又多吃了一个第二天又吃了前天剩余桃子数量的一半觉得好不过瘾于是又多吃了一个以后每天都是吃前天剩余桃子数量的一半觉得好不过瘾又多吃了一个等到第10天的时候发现桃子只有1个了。 需求:请问猴子第一天摘了多少个桃子?
分析
①f(10)1 ②公式f(x)-f(x)/2-1f(x1) ③变形f(x)/2-1f(x1) ④变形2f(x)2*f(x1)2
public static int f(int n){if(n10){return 1;}else{return 2*f(n1)2;}
}