Monthly Archive for January, 2009

牛年快乐

在敲下这些文字的时候,已经是牛年了,大家都忙着互送祝福。

我在这里,写下牛年的第一篇博客,给各位朋友拜年!

祝大家新年快乐、合家欢乐、身体健康、心想事成!

Fibonacci数列的递归实现

To view this ariticle in English, please click here.

上一篇文章中简单举例说明了如何使用递归调用来实现阶乘计算,而本篇文章要说的是递归的另外一个经典应用—— Fibonacci 数列。

Fibonacci 数列是指这样一个无穷数列:1, 1, 2, 3, 5, 8 ... 除前两项之外,每一项的值都等于它前面两项之和。

既然 Fibonacci 数列本身就是用递归的方法来定义的,那么我们可以很轻松地用递归来实现它的相关计算。

同计算阶乘一样,所要计算的数值越大,调用的次数越多,而且冗余的递归调用将呈几何级数增长,程序的效率也将越来越低(你可以修改程序,亲自测试一下)。所以你需要根据实际情况,从程序的效率和可读性上作出取舍。

例:打印 Fibonacci 数列的前10项,使用递归调用实现。

代码如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Fibonacci
{
    class Program
    {
        public long Fibonacci(int n)
        {
            if (n > 0 && (n == 1 || n == 2))
            {
                return 1;
            }
            else
            {
                return Fibonacci(n - 1) + Fibonacci(n - 2);
            }
        }
 
        static void Main(string[] args)
        {
            Program p = new Program();
            for (int i = 1; i < 11; i++)
            {
                Console.Write(p.Fibonacci(i));
            }
        }
    }
}

递归调用实现阶乘计算

To view this ariticle in English, please click here.

根据阶乘计算本身的特点,使用递归调用来实现十分方便。

需要注意的是,递归其实是一种效率比较低下的算法,尤其是当运算量比较大的时候,所以在决定是否使用递归调用要根据情况谨慎考虑。

这是我在学习 C# 程序设计语言时做过的一道题目。

例:求 1! + 2! + ... + 10! 并打印出结果,要求使用递归调用实现。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace Factorial
{
    class Program
    {
        public long Factorial(int n)
        {
            if (n == 0 || n == 1)
            {
                return 1;
            }
            else
            {
                return n * Factorial(n - 1);
            }
        }
 
        static void Main(string[] args)
        {
            Program p = new Program();
            long sum = 0;
            for (int i = 1; i < 11; i++)
            {
                sum += p.Factorial(i);
            }
            Console.WriteLine("1! + 2! + ... + 10! = " + sum);
        }
    }
}

Hello code!

这是我在 Code 分类下的第一篇文章。
这个分类主要记录我自己写过的程序或算法,包括学习过程中的一些练习等。
我现在主要学习的是 C#,以后将继续学习 .NET 的其他相关课程。
我使用的 IDE 是 Microsoft Visual Studio 2008,常用编辑器有 Notepad 和 EditPlus。
希望与有着相同专业或兴趣的 Blogger 们一起分享,共同进步。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace MyFirstPostUnderCode
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

整理博客

这几天把博客重装了一次,也重新整理了一下。

主要的一些更改如下:

改用官方原版,不含汉化包,用了这么久 WordPress,也该换原版了,呵呵。
更换主题为 Js o3 1.0,感谢作者 Jinwen。个人非常喜欢这种简洁的样式,有些地方自己还在慢慢修改。以后可能不会常换主题,只在此基础上改进。
为了美观,首页只显示摘要(RSS 中仍采用全文输出,欢迎订阅)。感谢 大猫 的帮助。
整理页面,只留下必须的5个,豆瓣的收藏秀和 Twitter 暂时先放到 About 里,有时间再整理到侧栏里去(欢迎点击链接过去参观和 follow)。
取消首页的友情链接,全部放入 Links 页面,采用随机方式显示,以后可能会返回部分链接到侧栏。
新增 Gustbook 页面,各位爱灌水爱评论的同学可以畅所欲言了。
为所有文章加上 Tag,Tag Cloud 已经出现。

暂时写这么多吧,继续折腾……