一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
} 不是很明白
有没有更简洁的写法
答:public class MainClass
{
public static void Main()
{
Console.WriteLine(Foo(30));
}
public static int Foo(int i)
{
if (i <= 0)
return 0;
else if(i > 0 && i <= 2)
return 1;
else return Foo(i -1) + Foo(i - 2);
}
} 不是很明白
有没有更简洁的写法
上面的规律是从第3个开始,每个数都等于前两个数之和,所以递归时,i<=2时返回1,其他都是等于前两个数之和,即Foo(i-1)+Foo(i-2)
Func<int, int> fib = null;
fib= n => (n <= 2) ? 1 : fib(n - 1) + fib(n - 2);
Console.WriteLine(fib(30));
public static void Main()
{
Console.WriteLine(fib(30));
}
public static int fib(int n)
{
if (n < 3)
return 1;
else
{
int a = 1;
int b = 1;
for (int i = 2; i < n - 1; i++)
{
b = a + b;
a = b - a;
}
return a + b;
}
}