一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。

努力就是努力 2014-06-14 02:28: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);
}
}


还是有点看不懂,求解释一下
...全文
6213 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
努力就是努力 2014-06-16
  • 打赏
  • 举报
回复
现在懂了,,,前两者相加,一看就知道了,就是代码有点绕
西南黑少 2014-06-16
  • 打赏
  • 举报
回复
static void Main(string[] args) { int count = Foo(30); Console.WriteLine(count); } public static int Foo(int i) { if (i <= 0) return 0; else if (i > 0 && i <= 2) return 1; else { int a = Foo(i - 1); int b = Foo(i - 2); int count = a + b; return count; } }
jimil 2014-06-15
  • 打赏
  • 举报
回复
数学不行啊楼主,首先你得明白这样的数组规律是什么,其规律就是前两者相加,然后你就看明白了。 此数组为第二个开始相加,即 1+0=1 1+1=2 2+1=3 Foo(3 -1) + Foo(3 - 2) i=3 3+2=3 Foo(4 -1) + Foo(4 - 2) i=4 。。。。。
smthgdin_020 2014-06-15
  • 打赏
  • 举报
回复
题目是从第三位开始每一位都是前面2位的和。 i(3)=i(2)+i(1); i(4)=i(3)+i(2); 以此类推。 对于i(4)=i(3)+i(2); 来说,i(3)其实又重复i(3)=i(2)+i(1);
smthgdin_020 2014-06-15
  • 打赏
  • 举报
回复
你先要看懂这道题的规律,然后明白什么是递归,自然就能理解算法了。
  • 打赏
  • 举报
回复
我们要强调地是,训练一个程序设计人员具有相对高层次地表达算法并直接进行编程的设计思路,而绝不是习惯于自底向上去拼凑程序算法。
  • 打赏
  • 举报
回复
如果搞懂这个数学函数公式,那么讲数学函数编程为c#函数应该不是问题。 可以“进阶”地考虑一下优化。可以在算法中对于中间结果进行保存,保证重复利用,这样再来比较一下计算速度就会发现质的变化:
private static List<long> fValues = new List<long>() { 1, 1 };

static long f(int x)
{
    if (x < 1)
        throw new InvalidOperationException();
    else if (x <= fValues.Count)
        return fValues[x - 1];
    else
    {
        var r = f(x - 1) + f(x - 2);
        fValues.Add(r);
        return r;
    }
}
简单输出结果可以写
for (var i = 1; i <= 80; i++)
    Console.WriteLine("i={0}, f={1}", i, f(i));
var rnd = new Random();
for (var j = 1; j <= 80; j++)
{
    var i = rnd.Next(80) + 1;
    Console.WriteLine("i={0}, f={1}", i, f(i));
}
这样可以看出运算速度! 不要做“过分聪明的”优化。你应该首先考虑将中间结果缓存起来,以后充分利用。如果这样做又可以保证算法与数学公式清晰地对应,又能保证效率较好,何乐而不为呢? 不要做过分聪明的优化。
H_Gragon 2014-06-15
  • 打赏
  • 举报
回复
hmw145 2014-06-15
  • 打赏
  • 举报
回复
我给你另外一个算法,这个慢慢想就能理解,关于数学的问题,找规律就能解决!

  • 打赏
  • 举报
回复
斐波那契数列,楼主你还是先观察下数字本身的规律再去读代码吧。。。
xiaohuzihei 2014-06-15
  • 打赏
  • 举报
回复
淡淡的活着 2014-06-15
  • 打赏
  • 举报
回复
··靠··这个一看就懂的答案·然后用编程实现而已啊··
threenewbee 2014-06-14
  • 打赏
  • 举报
回复
google 菲波拉契数列 递归
chinnsyuutou 2014-06-14
  • 打赏
  • 举报
回复
先了解这个数组的结构,然后再来看结构 结构式后一个数=前一个数+前前一个数 然后再来看代码 Foo(i -1) + Foo(i - 2)
  • 打赏
  • 举报
回复
先要确认一下你的数学知识怎样
EdsionWang 2014-06-14
  • 打赏
  • 举报
回复
用笔头划划函数怎么执行调用的
Rumia 2014-06-14
  • 打赏
  • 举报
回复

static void Main(string[] args)
        {
            int count = Foo(30);
            Console.WriteLine(count); 
        }

        public static int Foo(int i)
        {
            if (i <= 0)
                return 0;
            else if (i > 0 && i <= 2)
                return 1;
            else
            {
                int a = Foo(i - 1);
                int b = Foo(i - 2);
                int count = a + b;
                return count;
            }
        } 
你这么修改一下 调试时单步走 看看Foo里面a、b、i还有最后count 观察他们的变动 最开始时Main函数里Foo(i)的i取个小一点的值 看下是个什么样流程 讲的话还真不知道怎么讲 你也可以画画流程图: 比如求a[4]的值就是下面这么一个流程: ①a[4]=a[3]+a[2],先求a[3] ②a[3]=a[2]+a[1],求a[2] ③a[2]=a[1]+a[0]=2,求出a[2] ④由③,②则改为a[3]=2+a[1],求a[1]=1,②a[3]=2+1=3 ⑤由④,①为a[4]=3+a[2],求a[2] ⑥a[2]=a[1]+a[0]=2 ⑦由⑥,则⑤里a[4]=3+a[2]=3+2=5
【目的】如果您希望弄懂框架的原理,但是苦于不知道如何读框架源码?希望该课程能够通过带领大家阅读源码的方式,了解源码是如何阅读的。该课程选择了一个比较小,比较简单的框架入门,相信大家应该也用过该工具——mybatis generator【内容】该课程内容如下,列出了具体时间,便于复习:第一课:mybatis-generator源码分析-解析配置这节课分为如下几段:【00:00-05:00】:介绍源码阅读的方法【05:00-08:00】:简介mybatis-generator的使用 【08:00-27:30】:mybatis-generator包一览 【27:30-结束】:解析配置源码解读 【总结】所在的位置:1.第一次总结【34:15】。2.第二次总结【52:40】 涉及的【设计思路】和【设计模式】:1.模板模式【15:30】。2.xml解析的对象设计+组合模式:【37:00】。3.策略模式:【45:40】 第二课:mybatis-generator源码分析-生成文件 这节课分为如下几段:        1. 【00:00-10:20】:上节课内容回顾       2. 【10:20-42:20】:如何从据库中获取元据信息       3. 【42:20-结束】:生成文件 【总结】所在的位置:1.第一次总结【37:45】。2.第二次总结【56:25】 涉及的【设计思路】和【设计模式】:1、简单工厂方法模式【35:20】。2、聚合的设计思想【44:00】。 第三课:mybatis-generator源码分析-总结 这节课分为如下几段:        1. 【00:00-01:00】: 设计思路总结         2. 【01:00-02:50】:配置解析总结         3. 【02:50-03:55】: 从据库获取信息总结         4. 【03:55-结束】: 文件的生成总结         

62,025

社区成员

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

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

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

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