青蛙上台阶,可以一下跳1步,也可以一下跳2步,n层台阶所有跳法?

青蛙上台阶,可以一下跳1步,也可以一下跳2步,n层台阶所有跳法?


问题分析:

1. 该问题为斐波那契数列问题,问题的求解方法是对子问题的递归求解。

f(n)=f(n-1)+f(n-2)n>2,

f(1)=1,

f(2)=2.

2. 求解出所有解法,则需要用栈记录递归中的解法。


Java代码:

public class JavaTest {

    int[] stack=new int[50];

    int top;

    int count;

    boolean flag;

    public void compute(int n){

        if(n>0){

            top=0;

            count=0;

            f(n);

        }

        int cc=0;

        if(n==1)

            cc=1;

        else if(n==2)

            cc=2;

        else{

            int a=1,b=2;

            for(int i=3;i<=n;i++){

                b=a+b;

                a=b-a;

            }

            cc=b;

        }

        if(n>0){

            if(flag||cc!=count)

                System.out.println("count:\t"+count+"\tcc:\t"+cc+"\t"+(cc==count));

        }

    }

    public void f(int n){

        if(n<=0)

            return;

        else if(n==1){

//            n=1时,只有一种走法,一下走一步

            stack[top++]=1;

            print();

            top--;

        }else if(n==2){

//            n=2时,有两种走法,一下走两步,或者在走一步的基础上再走一步

            stack[top++]=2;

            print();

            top--;


            stack[top++]=1;

            f(n-1);

            top--;

        }else{

//            n-2的基础上走两步

            stack[top++]=2;

            f(n-2);

            top--;

 

//            n-1的基础上走一步

            stack[top++]=1;

            f(n-1);

            top--;

        }

    }

    public void print(){

        count++;

        if(flag){

            System.out.println(count);

            for(int i=top-1;i>=0;i--){

                System.out.print(stack[i]+" ");

            }

            System.out.println();

        }

    }

    public JavaTest(boolean flag){

        this.flag=flag;

    }

 

    public static void main(String[] args) {

        JavaTest jt=new JavaTest(true);

        Print("Start...");

        for(int i=0;i<10;i++)

            jt.compute(i);

        Print("End");

    }

 

    public static void Print(Object obj) {

        System.out.println(String.valueOf(obj));

    }

}


问题扩展:

兔子繁殖问题


下载地址:

http://download.csdn.net/download/ssuchange/6706099


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值