跪求:输入一个数字判断它是否为斐波那契数 如题要求用最好用C#递归的方法写的输入一个数字,判断它是否为斐波那契数!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 F(n)=(1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n} int no = 30int[] arr = new int[no];arr[0] = 1;arr[1] = 1;for (int i=2; i<no; i++) arr[i] = arr[i-1] + arr[i-2];//数组arr里为30的裴波那契数 以上的unsafe代码版int no = 30int* arr = stackalloc int[no];int* p = arr;*p++ = *p++ = 1;for (int i=2; i<no; ++i, ++p) *p = p[-1] + p[-2]; 你搜索下“递归”满地都是斐不拉叽数列private int GetData(int index){ int ret; if((index ==0)||(index==1)) { ret=1; } if(index >1) { ret = GetData(index-1)+GetData(index-2); } return ret;} 你数组有多大,长度知道的话,假如有len项int[] t=new int[];for(i=0;i<=len-1;i++) t[i]=GetData(i);private int GetData(int index){ int ret; if((index ==0)||(index==1)) { ret=1; } if(index >1) { ret = GetData(index-1)+GetData(index-2); } return ret;}然后把你的数组里面的值一个一个拿出来和t[]比较不就完事? 符合楼主简化的思路:一个数是否是斐数,可以这样考虑,如果假n为斐数,假设此斐数前面一个斐数为x,那么再前面一个斐数必然就是n-x,再外前推一直可以算到起始的两个自然数必然分别都是1。如果这样推出的起始两数不全为1,就说明我们假设的x有误,我们从Int(n/2)到n来循环赋值给x,如果其中能推出起始的两数均为1,则n为斐数。否则不是。private bool judg_fei(int t){int a,b,i;for(i=INT(t/2);i<t;i++)a=t;b=i;while(a>1&&b>1){ a=t-i; b=2*i-t;if(a==1&&b==1)return true;if(a<=0||b<=0)break;}return false;} private bool judg_fei(int t){int a,b,i;for(i=INT(t/2);i<t;i++)a=t;b=i;while(a>1&&b>1){ b=a-b; a=a-b;if(a==1&&b==1)return true;if(a<=0||b<=0)break;}return false;} timer计时器问题 c# 网络socket编程问题,请各位老大进来看看 为什么会这样帮我看下 spread 里面的单元格合并问题(急) 请问用DataSet如何取得xml文件中指定表名的子表内容? 怎样把Unicode转为string型? 求DirectoryEntry.Invoke中的methodName集合和说明,谢谢 求#ziplib 源代码 急! 请大侠们帮忙--字体(Font)的单位换算 如何加密我的源码,和组件,对与SNK文件如何取得他的私有密码,和共有密码,并且如何使用,请指教 线程操作控件的问题,求解决办法..... 怎样删除事件委托链表中的某个委托
arr[0] = 1;
arr[1] = 1;
for (int i=2; i<no; i++) arr[i] = arr[i-1] + arr[i-2];
//数组arr里为30的裴波那契数
int* p = arr;
*p++ = *p++ = 1;
for (int i=2; i<no; ++i, ++p) *p = p[-1] + p[-2];
private int GetData(int index)
{
int ret;
if((index ==0)||(index==1))
{
ret=1;
}
if(index >1)
{
ret = GetData(index-1)+GetData(index-2);
}
return ret;
}
int[] t=new int[];
for(i=0;i<=len-1;i++)
t[i]=GetData(i);private int GetData(int index)
{
int ret;
if((index ==0)||(index==1))
{
ret=1;
}
if(index >1)
{
ret = GetData(index-1)+GetData(index-2);
}
return ret;
}
然后把你的数组里面的值一个一个拿出来和t[]比较不就完事?
一个数是否是斐数,可以这样考虑,如果假n为斐数,假设此斐数前面一个斐数为x,那么再前面一个斐数必然就是n-x,再外前推一直可以算到起始的两个自然数必然分别都是1。如果这样推出的起始两数不全为1,就说明我们假设的x有误,我们从Int(n/2)到n来循环赋值给x,如果其中能推出起始的两数均为1,则n为斐数。否则不是。
private bool judg_fei(int t)
{
int a,b,i;
for(i=INT(t/2);i<t;i++)
a=t;
b=i;
while(a>1&&b>1)
{
a=t-i;
b=2*i-t;
if(a==1&&b==1)
return true;
if(a<=0||b<=0)
break;
}
return false;
}
{
int a,b,i;
for(i=INT(t/2);i<t;i++)
a=t;
b=i;
while(a>1&&b>1)
{ b=a-b;
a=a-b;
if(a==1&&b==1)
return true;
if(a<=0||b<=0)
break;
}
return false;
}