*1.简单基础入门:求n!=1234…n;
这是最简单的递归算法,递归递归顾名思义就是自己调用自己,那什么是自己调用自己呢,空说无意,如下代码:
public class DiGui {
public static void main(String[] args) {
System.out.println(“请输入一个正整数n:”);
int n = new Scanner(System.in).nextInt();
int result = f(n);
System.out.println(result);
}
private static int f(int n) {
if(n==1){
return 1;
}else{
n= f(n-1)*n;
}
return n;
}
}
解题思路:当n=1,f(1)=1;当n=2,f(2)=f(1)*2=1x2;
当n=3,f(3)=f(2)*3=2x3=6;当n=n,f(n)=f(n-1)*n;
其实就是一种规律:
在支持自调用的编程语言中,递归可以通过简单的函数调用来完成,如计算阶乘的程序在数学上可以定义为:
2.用递归实现买汽水(华为面试题)
一个人买汽水,一块钱一瓶汽水,三个瓶盖可以换一瓶汽水,两个空瓶可以换一瓶汽水
问20块钱可以买多少汽水?
哇!华为真的"LOW"这不是在考验小学生吗?侮辱我们的智商啊! 咋一眼一看,额
貌似好像不是那么的简单哈.
沉下心来看看.
首先分析:
一瓶汽水:1soda = 1cap +1bottle;
两个空瓶:2bottle = 1soda;
三个瓶盖:3cap = 1soda;
那么递归退出条件就是: cup<3&&bottle<2 &&soda<1
因为在这个过程中,三个元素soda, cup, bottle都有连续的变化,所以递归调用时要将三个参数都传进去。
方法体如下:
private int Total(int soda,int cap,int bottle){
}
完整代码如下:
public class DiGui02 {
public static void main(String[] args) {
int total = Total(20, 0, 0);
System.out.println(total);
}
public static int Total(int Total,int caps,int bottles){
caps%=3; bottles%=2;
caps+=Total; bottles+=Total;
if(caps<3&&bottles<2){
return Total;
}
else{
return Total(caps/3+bottles/2,caps,bottles)+Total;
}
}
}
本人初次写博客,入门较晚,如有写的不对或者不好之处,望走过路过的各位大神指点,本人写下这些题纯粹为了加强自己的理解并做个笔记!