C#用递归算法实现:一列数的规则如下: 1、1、2、3、5、8、13、21、34,求第30位数是多少
方法一:递归算法
///<summary> ///一列数的规则如下:1、1、2、3、5、8、13、21、34求第30位数是多少,用递归算法实现。(C#语言) ///</summary> ///<paramname="pos"></param> ///<returns></returns> publicintGetNumberAtPos(intpos) { if(pos==0||pos==1) { return1; } intres=GetNumberAtPos(pos-1)+GetNumberAtPos(pos-2); returnres; }
方法二:不用递归
usingSystem; usingSystem.Collections; usingSystem.Collections.Generic; usingSystem.Text; namespaceTest { publicclassClass1 { privateArrayListlist=newArrayList(); publicClass1() { } publicClass1(intnum) :base() { inti; for(i=1;i<=num;i++) { list.Add(Calculation(i)); } } privateintCalculation(intnum) { if(num==1||num==2) return1; else returnConvert.ToInt32(list[num-2])+Convert.ToInt32(list[num-3]); } publicintCalculation() { returnConvert.ToInt32(list[list.Count-1]); } } publicclasstest { publicstaticvoidMain() { intj; intnum; for(j=1;j<100;j++) { Console.WriteLine("你要计算第多少位:"); stringreadstr; readstr=Console.ReadLine(); if(!string.IsNullOrEmpty(readstr)) { if(int.TryParse(readstr,outnum)) { if(num<1) continue; else { Class1c1=newClass1(num); Console.WriteLine(c1.Calculation()); } } else { continue; } } else { break; } } } } }
方法三:用循环实现
publiclonggetNumber(intpos) { longone=1; longtwo=1; if(pos==0||pos==1) { return1; } inti=3; longsum=1; while(i<=pos) { sum=one+two; one=two; two=sum; i++; } returnsum; }
以上就是本文的全部内容,希望能给大家一个参考,也希望大家多多支持毛票票。