| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1187 人关注过本帖
标题:C语言递归程序
只看楼主 加入收藏
yjbqq
Rank: 1
等 级:新手上路
帖 子:133
专家分:0
注 册:2006-10-10
收藏
得分:0 
以下是引用ld820903在2005-12-6 16:54:00的发言:
#include<stdio.h>
#include<string.h>
void main()
{
int n;
scanf("%d",&n);
printf("%d ",f(n));
getch();
}
int f(int k)
{
if(k==1)
return 1;
else
return k*f(k-1); 可以解释一下这里的两个return的返回值是怎样返回的吗?
}

几乎一样好。。


抵制日货,从我做起!!!
2006-11-22 21:07
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
在一次函数执行过程中只会执行一次return.
int f(int k)
{
if(k==1)
return 1;
else
return k*f(k-1); 可以解释一下这里的两个return的返回值是怎样返回的吗?
}
每次递归调用时判断递归是否到了出口(k==1).到了则执行return 1.否则该函数下执行返回k*(f(k-1))
这里它还会继续递归调用f(k-1)直到f(1)到出口.

倚天照海花无数,流水高山心自知。
2006-11-22 21:14
xianlin_lea
Rank: 1
等 级:新手上路
帖 子:72
专家分:0
注 册:2006-10-6
收藏
得分:0 


int SUM(int n)
{int sum;
if(n==1)
sum=1;
else
sum=n+SUM(n-1);
return sum;
}

这个比较简单!!


2006-11-22 21:14
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 
最典型的例子应该是汉诺塔
而像fibonacci数列有更好的方式实现
我觉得如果能完全理解汉诺塔的递归程序,那么可以说已经对递归有一定了解了

2006-11-23 09:12
lihengfeng
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2006-11-19
收藏
得分:0 

#include <assert.h>
#include <stdio.h>
#include <stdlib.h>

extern int cnt; /* count of the number of moves */

int get_n_from_user(void);
void move(int n, char a, char b, char c);

#include "hanoi.h"

int cnt = 0; /* count of the number of moves */

int main(void)
{
int n;

n = get_n_from_user();
assert(n > 0);
/*
// Move n disks from tower A to tower C,
// using tower B as an intermediate tower.
*/
move(n, 'A', 'B', 'C'); /* recursive fct */
return 0;
}

#include "hanoi.h"

void move(int n, char a, char b, char c)
{
if (n == 1) {
++cnt;
printf("%5d: %s%d%s%c%s%c.\n", cnt,
"Move disk ", 1, "from tower ", a, " to tower ", c);
}
else {
move(n - 1, a, c, b);
++cnt;
printf("%5d: %s%d%s%c%s%c.\n", cnt,
"Move disk ", n, "from tower ", a, " to tower ", c);
move(n - 1, b, a, c);
}
}

#include "hanoi.h"

int get_n_from_user(void)
{
int n;

printf("%s",
"---\n"
"TOWERS OF HANOI:"
"\n"
"There are three towers: A, B, and C.\n"
"\n"
"The disks on tower A must be moved to tower C. Only one\n"
"disk can be moved at a time, and the order on each tower\n"
"must be preserved at a time, and the order on each tower\n"
"or C can be used for intermediate placement of a disk.\n"
"\n"
"The problem starts with n disk on Tower A.\n"
"\n"
"Input n: ");
if (scanf("%d", &n) != 1 || n < 1) {
printf("\nERROR: Positive integer not found - bye!\n\n");
exit(1);
}
printf("\n");
return n;
}

这里面是不是包括了二叉树的左遍历的知识

2006-11-24 10:25
快速回复:C语言递归程序
数据加载中...
 
   



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

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