| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 901 人关注过本帖
标题:一个递归问题
只看楼主 加入收藏
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:8 
果然不是很难,今天上午把公牛母牛的事想复杂了。代码我觉得都不用我写了,我算了前 50 项(不知道为什么非要用递归,这个纯用递归慢的一塌糊涂。):
括号里的是前一项和后一项的差(换句话说,当前项加上那个括号里的数是下一项),括号里的就是 fibonacci 数列。
1       [0]
1       [0]
1       [1]
2       [1]
3       [1]
4       [2]
6       [2]
8       [3]
11      [3]
14      [5]
19      [5]
24      [8]
32      [8]
40      [13]
53      [13]
66      [21]
87      [21]
108     [34]
142     [34]
176     [55]
231     [55]
286     [89]
375     [89]
464     [144]
608     [144]
752     [233]
985     [233]
1218    [377]
1595    [377]
1972    [610]
2582    [610]
3192    [987]
4179    [987]
5166    [1597]
6763    [1597]
8360    [2584]
10944   [2584]
13528   [4181]
17709   [4181]
21890   [6765]
28655   [6765]
35420   [10946]
46366   [10946]
57312   [17711]
75023   [17711]
92734   [28657]
121391  [28657]
150048  [46368]
196416

之前给的表对错行了,现在修正了。


[ 本帖最后由 pangding 于 2011-3-29 22:43 编辑 ]
2011-03-29 21:42
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
给个代码吧,感觉帮人帮到底好一点。
虽然后来推了一下,发现不是很难,但还是比较有趣味性。收回之前说的此题无聊的话。
程序代码:
#include <stdio.h>

#define N 20

int f(int n)
{
    if (n <= 0 ) return -1;      // 这个是错误处理吧. 这个函数不接受负数参数.

    switch (n) {
        // 本来这个递推数列, 只要用给出前4项(看后面的用了n-4就知道)
        // 但给出 5 项之后,奇数的情况可以从 4 阶递归, 降成 3阶的.
        // 能显著提高程序的速度, 比较值. 虽然还是很慢吧...
        case 1: case 2: case 3:
                return 1;
        case 4: return 2;
        case 5: return 3;

        default:
            if (n&1) return 3*f(n-2) - f(n-3) - f(n-4);  // 奇数的情况
            else return 2*f(n-1) - f(n-2);              // 偶数的情况.
    }
}

int main(int argc, char *argv[])
{
    int i;
    for (i = 1; i < N; i++)
        printf("%d\n", f(i) );

    return 0;
}



[ 本帖最后由 pangding 于 2011-3-29 23:15 编辑 ]
2011-03-29 23:09
moon_peak
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2011-3-18
收藏
得分:0 
回复 12楼 pangding
学习了

Believe Yourself Forever
2011-03-30 13:20
快速回复:一个递归问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028902 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved