| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1072 人关注过本帖
标题:函数的递归调用。求解!
只看楼主 加入收藏
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
收藏
得分:0 
回复 9楼 天天涯涯
但在编程代码书写上,分奇偶数貌似更好实现。直接用if判断就行了。
2011-12-22 22:33
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
这是个人习惯的问题,你随意吧。

重剑无锋,大巧不工
2011-12-22 22:41
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:3 
回复 4楼 beyondyf
#include <stdio.h>
#include <malloc.h>
#define  LEN  sizeof(struct num)
struct  num
{
    int s;
    struct num * next;
};

int main()
{
    struct num *p, *q1, * q2, *head;
    int i, n;

    printf("Please input n:");
    scanf("%d", &n);
    head = q1 = (struct num * ) malloc (LEN);
    q1 -> s = 1;
    q2 = (struct num * ) malloc (LEN);
    q1 -> next = q2;
    q2 -> s = 1;
    p = (struct num * ) malloc (LEN);
    q2 -> next = p;

    for (i = 2; i <= n; i++)
    {
        p -> s = 3 * (q1 -> s) + 2 * (q2 -> s);      
        p = (struct num * ) malloc (LEN);
        q2 -> next -> next = p;
        q2 = q2 -> next;
        q1 = q1 -> next;   
    }
    p -> next = NULL;
    for (i = 0; i <= n; i++)
    {
    printf("%d    \n", head -> s);
    head = head -> next;
    }
    return 0;
}

[ 本帖最后由 有容就大 于 2011-12-22 22:47 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2011-12-22 22:42
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
首先,这个问题用不着链表。
其次,就算用,也该记得用完释放空间。

重剑无锋,大巧不工
2011-12-22 23:39
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 14楼 beyondyf
刚接触链表,能请教下怎么释放吗,比如我上面的程序,是只释放head指针还是全部的指针都要释放掉?

梅尚程荀
马谭杨奚







                                                       
2011-12-23 10:22
luojie5683
Rank: 2
来 自:重庆
等 级:论坛游民
帖 子:69
专家分:49
注 册:2011-10-10
收藏
得分:0 
回复 3楼 embed_xuel
我懂什么叫递归,我只是不懂运算过程,我的理解是:一直调用在调用函数f(),最后n应该=0或者1啊,那么返回值也应该是1啊,则3*1+2*1就该=5啊。望大侠赐教。
2011-12-23 16:40
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:3 
回复 6楼 beyondyf
当n为偶数时,f(n)=(3^n+1)/2;当为奇数时f(n)=(3^n-1)/2。
怎么推导的?

                                         
===========深入<----------------->浅出============
2011-12-23 19:10
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
回复 17楼 laoyang103
f(n) = 2 * f(n - 1) + 3 * f(n - 2)

f(n) + f(n - 1) = 3 * (f(n - 1) + f(n - 2))
                = 3 * 3 *(f(n - 2) + f(n - 3))
                = 3^(n - 1) * (f(1) + f(0))
                = 2 * 3^(n - 1)

f(n) = 2 * 3^(n - 1) - f(n - 1)
     = 2 * 3^(n - 1) - 2 * 3^(n - 2) + f(n - 2)
     = 2 * 3^(n - 1) - 2 * 3^(n - 2) + 2 * 3^(n - 3) - f(n - 3)
     ...
     = 2 * [3^(n-1) - 3^(n-2) + 3^(n-3) ... +(-1)^(n-2) * 3] + (-1)^(n-1) * f(1)

中括号中的部分是一个等比数列前若干项的和
其中

a1 = 3^(n-1)
q = -1/3
项数为n-1项。

代入公式后为

f(n) = 2 * 3^(n-1) * (1 - (-1/3)^(n-1)) / (1 + 1/3) + (-1)^(n-1)
化简后即
f(n) = (3^n + (-1)^n)/2

重剑无锋,大巧不工
2011-12-23 20:03
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 18楼 beyondyf
要是高考时候的数列问题出这个 杨大哥肯定是满分

                                         
===========深入<----------------->浅出============
2011-12-23 20:37
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
呵呵,喜欢数学而已,不过现在退步了很多,前几天工作中需要解一个不定积分,结果没推导出来,最后查的积分公式表。

重剑无锋,大巧不工
2011-12-23 20:50
快速回复:函数的递归调用。求解!
数据加载中...
 
   



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

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