一个简单的算法题目,搞了半天,希望大家能给点意见

昨天(周五)参加一个小的面试,在线的面试,面试的老师给了我一个题目,可能之前我说了自己最近作过递归算法的缘故,给我的题目刚好让我一下子就想到了递归算法上,在他给我的时间内我想我没有的出正确的答案,所以在这里想和大家讨论下,并且把自己的目前结论贴出来。

题目:编写一个函数,函数只能接受一个值,打印出如下的值

如果函数接受1,打印0

如果函数接受2,打印01

如果函数接受3,打印011

如果函数接受4,打印0112

依次类推..................... 

我的想法,一开始就在用递归去解决这个问题,不过到现在为止,还没有得到比较好的递归方法。不用递归去实现不适很难,但是我感觉出题的老师可能不会满足那样的答案的,所以自己做出了如下的一个方法:

Test类

class Test

{

       public static void Main(String[] args)

      {

             double iniNum=int.Parse(args[0]);

              double largeNum=GetLargeNum(iniNum);

             if(largeNum==0)

            {

                   Console.WriteLine("0");

            }

           else if(largeNum==1&&iniNum<=2)

           {

                 Console.WriteLine("0");

                 Console.WriteLine("1");

           }

          else

            {

                   Console.WriteLine("0");

                  Console.WriteLine("1");

                 double start1=0;

                 double start2=1;

                for(;start1+start2<=largeNum;)

                {

                      double temp=start1+start2;

                      Console.WriteLine(temp);

                     start1=start2;

                     start2=temp;

                }

            }

      }

     private static Double GetLargeNum(int  num)

    {

          if(num==1)

          {

                    return 0;

          }

         else if(num==2)

         {

                 return 1;

        }

       else

       {

                return GetLargeNum(num-1)+GetLargeNum(num-2);

       }

    }

}

希望大家给点意见,呵呵,我的算法很烂,以后得不断的努力了。

虽然可以正确的打印,但是有个问题,输入100后就挂掉,我测试了下运行50以内的数据没有问题,没有报堆栈溢出的错误,可能是运算太慢了的缘故吧,如果输入10000,那不是要等一天,呵呵,欢迎大家指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值