一列数的规则如下: 1、1、2、3、5、8、13递归方法 求出30位数

hxn1987420 2010-05-24 03:10:31
RT~~
说说思路
新手上路 没点头绪
最好能简单的说明递归方法!!!
...全文
713 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdtoo 2011-05-31
  • 打赏
  • 举报
回复
private static long getNum(long num){
return num==2||num==1 ? 1 : getNum(num-1)+getNum(num-2);
}
liyoubaidu 2010-05-24
  • 打赏
  • 举报
回复
无聊的很
言士心 2010-05-24
  • 打赏
  • 举报
回复
凑个热闹!~
libinlink 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 viena 的回复:]
C# code
//递归裴波那契数列
public int fei(int i)
{
if (i==1 || i==2)
{
return 1;
}
else
{
return fei(i-1) + fei(i-2);
}
}
//非递归裴波那契数列,unsafe代码(用指针)
public……
[/Quote]
正解啊。。。。。。。。。。
hxn1987420 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 t_long 的回复:]
面试十次,八次有这题
最主要的是要理解递归,而不是这道题
[/Quote]

就是不理解噢 ~~哎 都给的答案 没有说道理的~~
细嗅蔷薇 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 t_long 的回复:]
面试十次,八次有这题
最主要的是要理解递归,而不是这道题
[/Quote]
第一次面试的时候碰到了,不会,回去 背下来了
然后 次次面试 次次都有.....
yypf2540017 2010-05-24
  • 打赏
  • 举报
回复
抢分的太多
jlds123 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhanlixin 的回复:]
public int GetNumberAtPos(int pos)
{
if(pos==0||pos==1)
{
return 1;
}
int res = GetNumberAtPos(pos - 1) + GetNumberAtPos(pos - 2);
return res;
}
[/Quote]
re
T_long 2010-05-24
  • 打赏
  • 举报
回复
面试十次,八次有这题
最主要的是要理解递归,而不是这道题
viena 2010-05-24
  • 打赏
  • 举报
回复
//递归裴波那契数列
public int fei(int i)
{
if (i==1 || i==2)
{
return 1;
}
else
{
return fei(i-1) + fei(i-2);
}
}
//非递归裴波那契数列,unsafe代码(用指针)
public unsafe int fib(int no)
{
int* fib = stackalloc int[no];
int* p = fib;
*p++ = *p++ = 1;
for (int i=2; i<no; ++i, ++p) *p = p[-1] + p[-2];
return fib[no];
}
阿双2009 2010-05-24
  • 打赏
  • 举报
回复

Int64[] list = new Int64[100];

private void Form1_Load(object sender, EventArgs e)
{
list[0] = 1;
list[1] = 1;
for (int i = 2; i < 100; i++)
{
list[i] = list[i - 1] + list[i - 2];
}
}

private void btnTest_Click(object sender, EventArgs e)
{
double f = getFibonacciNumAtPos(5);
string f1 = GetNumberAtListPos(5);
}

string GetNumberAtListPos(int pos)
{
return list[pos - 1].ToString();
}

double getFibonacciNumAtPos(int n)
{
//直接利用其通项公式 (1/√5)*{[(1+√5)/2]^n - [(1-√5)/2]^n}
return (1.0 / Math.Sqrt(5.0)) * (Math.Pow((1 + Math.Sqrt(5.0)) / 2.0, n) - Math.Pow((1 - Math.Sqrt(5.0)) / 2.0, n));
}


提供这两种方法,不建议在程序中用递归
bingrou1012 2010-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ck11926375 的回复:]
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(Foo(3).ToString());
}

public static int Foo(int i)
{
if (i <= 0)
return 0;
else if (i > 0 && i <……
[/Quote] 就是这样的!完全正确
liuxin0121 2010-05-24
  • 打赏
  • 举报
回复
上面随手打的,敲错不少地方,重新来一次

void main()
{
string result = recu(30).toString();
console.WriteLine(result);
console.ReadLine();
}

public static int recu(int i)
{
if(i <= 0)
return 0;

else if (i = 1)
return 1;

else
return recu(i-2) + recu(i-1);
}
jack15850798154 2010-05-24
  • 打赏
  • 举报
回复
130道面试题的递归算法;
3. 一列数的规则如下: 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);
}
}
丰云 2010-05-24
  • 打赏
  • 举报
回复
int a = 1;
int b = 1;
List<int> re = new List<int>();
re.Add(1);
re.Add(1);
while(re.Count() < 30)
{
int t = a + b;
a = b;
b = t;
re.Add(b);
}
return re;
liuxin0121 2010-05-24
  • 打赏
  • 举报
回复

void main()
{
console.WriteLine(recu(30));
console.ReadLine();
}

public static int recu(int i)
{
if(i <= 0)
return 0;
if (i = 1)
return 1;
if (i > 1)
return recu(i-2) + recu(i-1);
}
JiuchunYoung 2010-05-24
  • 打赏
  • 举报
回复
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);
}
}
tashiwoweiyi 2010-05-24
  • 打赏
  • 举报
回复


public static int 递归算法(int num)
{
if (num <= 0)
return 0;
else if (num > 0 && num <= 2)
return 1;
else return 递归算法(num - 1) + 递归算法(num - 2);
}

fanlose2 2010-05-24
  • 打赏
  • 举报
回复

int a = 1; //开始第一位
int b = 1; //开始第二位
int c = 0; //相加值
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append(a+"、"+b); //初始
for (int i = 1; i <= 28; i++) //已经有2个,所以循环28个可以到30个。
{
c = a + b; //
a = b; // 为计算下一个值赋值
b = c; // 为计算下一个值赋值
sb.Append("、"+c.ToString()); //累加
}
Response.Write(sb.ToString());

//结果:1、1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584、4181、6765、10946、17711、28657、46368、75025、121393、196418、317811、514229、832040

woshiwangjincai 2010-05-24
  • 打赏
  • 举报
回复
不用递归 用循环也能实现啊!不过都是一样的,反正你要输出是不是!会用那个用哪个
这不是fac***算法吗?

protected void Page_Load(object sender, EventArgs e)
{
int[] arr = new int[30];
arr[0] = 1;
arr[1] = 1;
for (int i = 0; i < 30; i++)
{
if ((i == 0) || (i == 1))
{
Response.Write(arr[i]+" ");
}
else
{
arr[i] = arr[i - 1] + arr[i - 2];
Response.Write(" "+arr[i]);
}
}
}
加载更多回复(4)

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧