算法问题1:有一列数1,1,2,3,5,........求第30个数.
我的解题思想(反正题不是我自己想出来的,感觉应该要有这样的思考方式去想这个问题,请高手指教):
1.把第30个数设为n,感觉这个很重要,要把n利用起来才可以解决问题
2.首先是要能看出第n个数是n前面2个数的和,即:n=n-1+n-2,至于要怎么看出我也不清楚
3.要求n必须要先求出第n-1和第n-2个数的值,所以应该使用递归,先定义好递归的函数,例如:int Foo(int n){...};
4.找出递归点,n小于0的都为0,n小于3的都为1,然后n>=3时才开始满足条件
所以:
int Foo(int n){
if(n<0)
return 0;
else if(n>0&&n<3)
return 1;
else
return Foo(n-1)+Foo(n-2);
};
完整代码如下:
class Program { static void Main(string[] args) { for (int i = 1; i <= 30; i++) { Console.WriteLine(Foo(i)); } Console.ReadKey(); } public static int Foo(int n) { if (n <= 0) return 0; if (n > 0 && n < 3) return 1; else return Foo(n - 1) + Foo(n - 2); } }
每天进步一点点

浙公网安备 33010602011771号