今天去面试 有一道题是这样的
1,1,2,3,5,8,13,21,34...
请用递归算法写出第三十个是多少
于是我就
int old=0; int new =1;int temp;
for(int i=0;i<=30;i++)
{
temp=old+new;
old=new;
new=temp;
}
Console.Write(temp);
然后面试官就说我做错了,这不是递归。。。其实我也不懂递归具体是什么算法
他问我们知道什么是递归么 我说就是一层一层推下去的 他没回答我。。。
搞得比较郁闷。。。估计这次的面试又是这么结束了
看来自己还是得扎实的学习啊。。。
int sum = 1; f(int temp) { if(temp <30) { sum += temp; } else { f(temp + 1); } } main(){f(1);}
f(temp + 1);不是要写在if里面吗?
@.F.: 你试试吧,我这里没有编译环境,呵呵
@会长: 我用你的做法做不出来...秋壶冰月 的就可以
@.F.: 我没试,算是伪代码吧
@会长: 恩 大概的思路就是这样子的
@.F.: 是有问题,早上来的时候我没有编译环境,没有试试,不好意思呀。你用秋壶冰月的答案吧。
@会长: 嘿嘿 其实有这么多人回答我的疑惑 我还是非常高兴的
@.F.:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine(f(29)); Console.ReadKey(); } static int f(int temp) { if (temp == 0 || temp == 1) { return 1; } else { return f(temp - 1) + f(temp - 2); } } } }
真是不好意思,没有自己编译试试
@会长: 没事儿 还是非常感谢你...
@.F.: 第三十个参数应该传29.
@会长: 恩 晓得的 我去试过了
递归就是自己调用自己
递归,就是调用自己!在一些场合,使用是非常方便的,比如TreeView
static void Main(string[] args) { long result=Fb(30); // Console.WriteLine(result); } static long Fb(int n) //递归容易栈溢出,因为在方法内部,创建很多方法,超出线程栈分配空间,就会栈溢出 { if (n==0) return 0; if (n==1) return 1; if (n>1) return Fb(n-1)+Fb(n-2); }
还是觉得你回答的好 可是 已经结帖了才发现你的最好使 真尴尬
@.F.: 没事!
if (n > 1) return 斐波数列(n - 1) + 斐波数列(n - 2);
if (n == 1) return 1;
else return 0;
这样写比较好
....递归都不知道....数据结构,算法,编程不可少
这是一道经典的面试题,叫波菲数列,刚入门的每门语言都会提到它的,可见你的功底,加油啊!
google一下什么是递归,一大片的结果,比你在这问快和有效多了