JAVA常见的递归算法问题及相关面试题

*1.简单基础入门:求n!=1234n;

这是最简单的递归算法,递归递归顾名思义就是自己调用自己,那什么是自己调用自己呢,空说无意,如下代码:
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;
        }
    }
}

本人初次写博客,入门较晚,如有写的不对或者不好之处,望走过路过的各位大神指点,本人写下这些题纯粹为了加强自己的理解并做个笔记!

你可能感兴趣的:(JAVA小问题)