| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1038 人关注过本帖
标题:递归的参数传递问题
只看楼主 加入收藏
zsy_pfan
Rank: 1
等 级:新手上路
威 望:1
帖 子:23
专家分:0
注 册:2009-2-9
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
递归的参数传递问题
小弟70的智商自学递归一直不明白,恳请高手指点,主要是给我讲解一下参数是怎么传递的,以下面的程序举例
比如我调用hanoi(4,'A','B','C')时,我是这么理解的,当程序走到第10行时,开始函数调用,也就是说此时
n=4,a='A',b='B',c='C',经过第16行的判断之后,开始执行第20行,也就是说开始递归,小弟认为,n=4,a='A',b='B',c='C'
这些是函数体内的局部变量,那么执行20行的时候,其实参情况应该是hanoi(3,'A','C','B'),但事实证明不是,所以我想请问
这是为什么?参数到底是如何传递的?
恳请各位指点,正面回答问题,希望大家能给出有实质性的回答,在此谢过!!
1#include<stdio.h>
2void move(char,char);
3void hanoi(int,char,char,char);
4int main(void)
5{
6    int m;
7    printf("input the number of disks:");
8    scanf("%d",&m);
9    printf("The step to moving %d disks:\n",m);
10    hanoi(m,'A','B','C');
11    
12    return 0;
13}
14void hanoi(int n,char a,char b,char c)
15{
16    if(n==1)
17        move(a,c);
18    else
19    {    
20        hanoi(n-1,a,c,b);
21        move(a,c);
22        hanoi(n-1,b,a,c);
23    }
24}
25void move(char x,char y)
26{
27    printf("%c-->%c\n",x,y);
28}
搜索更多相关主题的帖子: 递归 参数 
2009-07-28 18:15
AND_Y
Rank: 2
等 级:论坛游民
帖 子:18
专家分:45
注 册:2009-7-31
收藏
得分:4 
本人最近也在学那个递归啊
呵呵  不知道自己智商是多少 可能不高吧 一直弄不明白啊
2009-07-31 16:33
configsys
Rank: 1
等 级:新手上路
帖 子:1
专家分:4
注 册:2008-3-31
收藏
得分:4 
好难啊
2009-08-02 19:56
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:4 
虽然汉诺塔是经典的递归例子,但由于它传递的参数很多,不适合新手学习递归。
大家可以先理解下求阶乘的递归算法,就知道参数到底是怎么变化的。
PS:n!=n*(n-1)!
int f(n)
{
    if(n==1)return 1;
    return n*f(n-1);
}

倚天照海花无数,流水高山心自知。
2009-08-03 21:08
mengfp
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:45
专家分:141
注 册:2009-8-5
收藏
得分:0 
递归方法可以简化程序设计的工作,但其效率较低,一般尽量不用。
以求n的阶乘为例,直接求是不可能的,但如果有人告诉我n-1的阶乘,那么我直接乘以n便可以求出结果,以此类推,直到找到一个出口,引发连锁反应,问题便可解决。
递归方法的参数必须为同一类型,具有一样的意义。
可以这样可理解,我是n,要我求n的阶乘,不好求,于是我告诉n-1:“你把n-1的阶乘给我算出来,我等着。”n-1的想法和我一样,于是n-1告诉n-2:“你把n-2的阶乘求出来,我等着。”以此类推,直到2告诉1:“你把1的阶乘求出来,我等着”。1便把自己告诉2。2等到1传回的1的阶乘,便求出2的阶乘传给3……直到n-1把n-1的阶乘传给n,n用得到的值(n-1)!*n,得到最终的结果。
这里“1”就是递归的出口。
想更好的了解递归,建议看看栈!
2009-08-11 16:53
快速回复:递归的参数传递问题
数据加载中...
 
   



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

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