首页 新闻 会员 周边

什么是递归算法

0
[已解决问题] 解决于 2013-11-26 09:40

今天去面试 有一道题是这样的

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);

 

然后面试官就说我做错了,这不是递归。。。其实我也不懂递归具体是什么算法

他问我们知道什么是递归么 我说就是一层一层推下去的   他没回答我。。。

搞得比较郁闷。。。估计这次的面试又是这么结束了

看来自己还是得扎实的学习啊。。。

C#
.F.的主页 .F. | 初学一级 | 园豆:13
提问于:2013-11-25 23:42
< >
分享
最佳答案
-1
int sum = 1;

f(int temp)
{
      if(temp <30)
      {
          sum += temp;
      }
      else
      {
          f(temp + 1);
      }
}

main(){f(1);}
奖励园豆:5
会长 | 专家六级 |园豆:12401 | 2013-11-26 09:29

f(temp + 1);不是要写在if里面吗?

.F. | 园豆:13 (初学一级) | 2013-11-26 09:44

@.F.: 你试试吧,我这里没有编译环境,呵呵

会长 | 园豆:12401 (专家六级) | 2013-11-26 14:04

@会长: 我用你的做法做不出来...秋壶冰月 的就可以

.F. | 园豆:13 (初学一级) | 2013-11-26 14:06

@.F.: 我没试,算是伪代码吧

会长 | 园豆:12401 (专家六级) | 2013-11-26 14:07

@会长: 恩  大概的思路就是这样子的

.F. | 园豆:13 (初学一级) | 2013-11-26 14:08

@.F.: 是有问题,早上来的时候我没有编译环境,没有试试,不好意思呀。你用秋壶冰月的答案吧。

会长 | 园豆:12401 (专家六级) | 2013-11-26 14:11

@会长: 嘿嘿  其实有这么多人回答我的疑惑  我还是非常高兴的

.F. | 园豆:13 (初学一级) | 2013-11-26 14:12

@.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);
            }
        }

    }
}

真是不好意思,没有自己编译试试

会长 | 园豆:12401 (专家六级) | 2013-11-26 14:22

@会长: 没事儿 还是非常感谢你...

.F. | 园豆:13 (初学一级) | 2013-11-26 14:23

@.F.: 第三十个参数应该传29.

会长 | 园豆:12401 (专家六级) | 2013-11-26 14:25

@会长: 恩  晓得的  我去试过了

.F. | 园豆:13 (初学一级) | 2013-11-26 14:26
其他回答(5)
3

递归就是自己调用自己

唯我独萌 | 园豆:537 (小虾三级) | 2013-11-25 23:51
4

递归,就是调用自己!在一些场合,使用是非常方便的,比如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);
}
秋壶冰月 | 园豆:5903 (大侠五级) | 2013-11-25 23:52

   还是觉得你回答的好   可是  已经结帖了才发现你的最好使  真尴尬

支持(0) 反对(0) .F. | 园豆:13 (初学一级) | 2013-11-26 10:06

@.F.: 没事!

支持(0) 反对(0) 秋壶冰月 | 园豆:5903 (大侠五级) | 2013-11-26 10:16

            if (n > 1) return 斐波数列(n - 1) + 斐波数列(n - 2);
            if (n == 1) return 1;
            else  return 0;

 

这样写比较好

支持(0) 反对(0) .F. | 园豆:13 (初学一级) | 2013-11-26 10:16
2

....递归都不知道....数据结构,算法,编程不可少

iEvent | 园豆:529 (小虾三级) | 2013-11-26 08:04
2

这是一道经典的面试题,叫波菲数列,刚入门的每门语言都会提到它的,可见你的功底,加油啊!

天堂的鸽子 | 园豆:138 (初学一级) | 2013-11-26 08:54
2

google一下什么是递归,一大片的结果,比你在这问快和有效多了

平常心队长 | 园豆:1113 (小虾三级) | 2013-11-26 08:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册