昨天(周五)参加一个小的面试,在线的面试,面试的老师给了我一个题目,可能之前我说了自己最近作过递归算法的缘故,给我的题目刚好让我一下子就想到了递归算法上,在他给我的时间内我想我没有的出正确的答案,所以在这里想和大家讨论下,并且把自己的目前结论贴出来。
题目:编写一个函数,函数只能接受一个值,打印出如下的值
如果函数接受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,那不是要等一天,呵呵,欢迎大家指正。