| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1602 人关注过本帖
标题:求C语言递归资料
只看楼主 加入收藏
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
求C语言递归资料
最近在研究C语言递归,哪位有这方面资料的?最好是带详细分析的那种,有些递归自己看还是看不太懂,求助啊。。
搜索更多相关主题的帖子: 资料 C语言 最好 
2013-05-02 21:29
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
收藏
得分:0 
其实不存在什么资料不资料,
我曾经也在递归迷茫了挺久。
递归其实就是在重复做同一个动作。
它能重复一次改变一次所有参数的值,然后继续重复。
递归最难的地方是如何正确的结束递归。

一同学习, 一同进步
2013-05-02 21:36
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
收藏
得分:0 
回复 2楼 dengluoy
额,同感,
还有,递归和循环结合在一起的不好想啊,想的头大了
2013-05-02 21:45
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
收藏
得分:0 
你现在看有看数据结构,?
如果你要看递归之前,建议先了解好堆栈。

一同学习, 一同进步
2013-05-02 21:52
x_x
Rank: 2
等 级:论坛游民
帖 子:44
专家分:43
注 册:2012-10-16
收藏
得分:0 
回复 4楼 dengluoy
堆栈我了解一些,在抽空看数据结构。。哎,。
2013-05-02 21:54
dengluoy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:127
专家分:165
注 册:2013-2-5
收藏
得分:10 
多画图,书上应该会有堆栈的图。
如果你了解堆栈后,在递归中的循环就不会很难理解了。

递归中的循环:
比如这个是递归中的循环。for(int i =0;i<3;i++)
{
   a(i);
}
i的初始值是0 ,如果要他循环第二次,也就是i =1;必须要是在下一次堆栈退栈后,才会开始本次栈的循环。 表达能力不是很好。。不知道你听懂没有。
方正多画图,多思考。 我其实是一个菜鸟。
我要下了,加油,!!

一同学习, 一同进步
2013-05-02 22:43
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:0 
呵呵..

[ 本帖最后由 Susake 于 2013-5-2 23:10 编辑 ]

仰望星空...........不忘初心!
2013-05-02 22:46
Baoshenglin
Rank: 2
等 级:论坛游民
帖 子:22
专家分:27
注 册:2013-3-2
收藏
得分:0 
记得要有终止表达式哦!
2013-05-02 22:52
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
收藏
得分:5 
递归1:Factorial
程序代码:
#include <stdio.h>

int factorial(int n) {
    if(n == 0) return 1;
    return n * factorial(n - 1);
}

int main() {
    int n;
    scanf("%d", &n);
    printf("%d\n", factorial(n));
    return 0;
}
递归2:Fibonacci
程序代码:
#include <stdio.h>

int fibonacci(int n) {
    if(n <= 1) return 1;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

int main() {
    int n;
    scanf("%d", &n);
    printf("%d\n", fibonacci(n));
    return 0;
}
递归3:Ackerman
程序代码:
#include <stdio.h>

int ackerman(int n, int m) {
    if(n == 1 && m == 0) return 2;
    if(n == 0 && m >= 0) return 1;
    if(n >= 2 && m == 0) return n + 2;
    return ackerman(ackerman(n -1, m), m - 1);
}

int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    printf("%d\n", ackerman(n, m));
    return 0;
}

递归4:全排列
程序代码:
#include <stdio.h>

void swap(int *a, int *b) {
    int temp = *a; *a = *b; *b = temp;
}

void perm(int a[], int k, int m) {
    int i;
    if(k == m) {
        for(i = 0; i <= m; printf("%d", a[i++])) ;
        printf("\n");
    }
    else for(i = k; i <= m; i++) {
        swap(&a[k], &a[i]);
        perm(a, k + 1, m);
        swap(&a[k], &a[i]);
    }
}

int main() {
    int a[] = {1, 2, 3};
    perm(a, 0, 3 - 1);
    return 0;
}
递归5:整数划分
程序代码:
#include <stdio.h>

int q(int n, int m)
{
    if((n < 1) || (m < 1)) return 0;
    if((n == 1) || (m == 1)) return 1;
    if(n < m) return q(n, n);
    if(n == m) return q(n, m-1) + 1;
    return q(n, m-1) + q(n-m, m);
}

int main()
{
    int m;
    scanf("%d", &m);
    printf("%d", q(m, m));
    return 0;
}
递归6:Hanoi
程序代码:
#include <stdio.h>

void move(char a, char b) {
    printf("%c---%c\n", a, b);
}

void hanoi(int n, char a, char b, char c) {
    if(n > 0) {
        hanoi(n - 1, a, c, b);
        move(a, b);
        hanoi(n - 1, c, b, a);
    }
}

int main() {
    int n;
    scanf("%d", &n);
    hanoi(n, 'a', 'b', 'c');
    return 0;
}
一般教材上都有这些的...








仰望星空...........不忘初心!
2013-05-02 23:09
q215236213
Rank: 4
等 级:业余侠客
威 望:1
帖 子:148
专家分:276
注 册:2012-7-24
收藏
得分:0 
递归的思想就是  把变得东西提出来作为参数,而把不变的放在方法体中!
2013-05-03 17:36
快速回复:求C语言递归资料
数据加载中...
 
   



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

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