1.上楼梯:每次只能走一步或两步。
递归方程:f(n) = f(n-1) + f(n-2) + f(n-3)
台阶数 | 走法 |
---|---|
1 | 1 |
2 | 2 |
3 | 4 |
4 | 7 |
… | … |
f(n) | f(n-1) + f(n-2) + f(n-3) |
分别用递归与迭代实现:
public class temp3 {
/*
//way1:递归
public static int fun(int n)
{
if(n<0) return 0;
if(n==1) return 1;
if(n==2) return 2;
if(n==3) return 4;
else
return fun(n-1)+fun(n-2)+fun(n-3);
}*/
//way2:迭代
public static int fun(int n)
{
int x1=1;
int x2=2;
int x3=4;
if(n==1) return 1;
if(n==2) return 2;
if(n==3) return 4;
for(int i=n-3;i>0;i--)
{
int t=x1;
x1 = x2; // x1=2
x2 = x3; // x2=4
x3 = x1+x2+t; //x3 = 7
}
return x3;
}
public static void main(String []args)
{
System.out.println(fun(2));
}
}
2.机器人走方格:从左上角走到右下角,只能往右或向下走
递归方程:f(x,y) = f(x,y-1) + f(x-1,y)
走法 | |
---|---|
(1,1) | 1 |
(1,2) | 1 |
(1,3) | 1 |
(2,1) | 1 |
(3,1) | 1 |
(1,j) | 1 |
(i,1) | 1 |
(2,2) | 2 |
(2,3) | 3 |
… | … |
f(x,y) | f(x,y-1) + f(x-1,y) |
分别用递归与迭代实现:
public class temp4 {
/*
//way1:递归
public static int fun(int x,int y)//x代表行,y代表列
{
if(x==1 || y==1) return 1;
else return fun(x-1,y)+fun(x,y-1);
}
*/
//way2:迭代
public static int fun(int x,int y)//x代表行,y代表列
{
//利用二维数组存储
int state[][] = new int[x+1][y+1]; //为了方便理解多分配
for(int j=1;j<=y;j++)
state[1][j] = 1;
for(int i=1;i<=y;i++)
state[i][1]