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

本文探讨了递归在解决实际问题中的应用,包括上楼梯问题的递归与迭代解法,机器人走方格问题的递归策略,合法括号的生成,非空子集的递归生成,以及全排列问题的迭代和回溯实现。此外,还涉及汉诺塔移动次数的封闭形式求解和斐波那契数列等经典递归问题。
最低0.47元/天 解锁文章
961





