| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 583 人关注过本帖
标题:我是菜鸟情帮我看看以下程序是怎样运行的
只看楼主 加入收藏
z974532452
Rank: 2
等 级:论坛游民
帖 子:23
专家分:41
注 册:2015-5-10
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:5 
我是菜鸟情帮我看看以下程序是怎样运行的
#include<stdio.h>
int w=3;
fun(int k)
{
    if(k==0)
    return w;
    return(fun(k-1)*k);/*主要这个语句看不懂*/
}
int main(void)
{
    int w=10;
    printf("%d\n",fun(5)*w);/*还有这个*/
    reruen 0;
)
看了一上午并在电脑上一个数字一个数字的试着运行,但还是没搞懂这个程序的结果为什么是3600‘
搜索更多相关主题的帖子: return 
2015-05-17 10:49
自傲
Rank: 2
等 级:论坛游民
帖 子:53
专家分:95
注 册:2015-5-16
收藏
得分:10 
回复 楼主 z974532452
#include<stdio.h>
//int w=3;
fun(int k)
{
    int w=5;/*多次改一下这个*/
    if(k==0)
    return w;
    printf("%d\t",k);/*试试这样检验*/
    return(fun(k-1)*k);
int main(void)
{
    int w=10;
    printf("%d\n",fun(5)*w);
}//其他我也不懂只是提供一个方法
2015-05-17 14:03
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
收藏
得分:0 
回复 楼主 z974532452
递归函数返回条件为k==0,返回值为3,所以fun(k-1)*k有返回时,k=1,k-1=0,返回值为3,依次返回的算式为3*1*2*3*4*5=360,360返回到main,printf 360*10=3600
收到的鲜花
  • z9745324522015-05-17 20:06 送鲜花  3朵   附言:我很赞同
  • 林月儿2015-05-17 21:15 送鲜花  3朵   附言:我很赞同

能编个毛线衣吗?
2015-05-17 14:21
z974532452
Rank: 2
等 级:论坛游民
帖 子:23
专家分:41
注 册:2015-5-10
收藏
得分:0 
回复 3楼 wmf2014
不知道怎样结帖,不知这样给你结算对不对,一个+3是不是加的分啊 如果是分那还有7分咋加啊 我那上边只有+3,+1,+2,-1
2015-05-17 20:12
helloUJS
Rank: 8Rank: 8
等 级:蝙蝠侠
帖 子:168
专家分:731
注 册:2013-3-27
收藏
得分:0 
看看这段代码能不能对理解有所帮助:
int f(int k)
{
    static int n=0;//n表示第n次函数条用
    int s;//s表示f(k)的计算结果
    n++;
    printf("n----%d,k----%d\n",n,k);
    if(k==1)
       {s=1;  //f(1)=1
       printf("n----%d,k----%d,s----%d\n",n,k,s);}
    else
      { s=f(k-1)*k;//f(k)=f(k-1)*k
        printf("n----%d,k----%d,s----%d\n",n,k,s);}
    return s;
}
2015-05-17 21:37
maqiangdemo
Rank: 2
等 级:论坛游民
帖 子:78
专家分:98
注 册:2014-2-26
收藏
得分:0 
回复 楼主 z974532452
表达的是递归思想,
1,main函数,w=10,输出 fun(5)*10;
2,执行fun(5),k=5,回到fun函数,因为(5!=0),执行第二个return 语句,fun(k-1)*k,即fun(5)=fun(5-1)*5;
3,执行fun(5-1),即fun(4),还是执行fun函数,因为(4!=0),继续第二个return语句,即fun(4)=fun(4-1)*4;
4,重复上面步骤,fun(3)=fun(3-1)*3,fun(2)=fun(2-1)*2,fun(1)=fun(0)*1;
5,执行fun(0),因为(0==0),执行第一个return语句,return w,w=3;
6,输出  3*1*2*3*4*5*10=3600
收到的鲜花
  • z9745324522015-05-18 21:08 送鲜花  3朵   附言:我很赞同
2015-05-18 08:40
快速回复:我是菜鸟情帮我看看以下程序是怎样运行的
数据加载中...
 
   



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

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