| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 584 人关注过本帖
标题:写出下题的答案及解析过程!谢谢啦!
只看楼主 加入收藏
雪色朝阳
Rank: 2
等 级:论坛游民
帖 子:36
专家分:43
注 册:2010-3-10
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:4 
写出下题的答案及解析过程!谢谢啦!
main()
{int x=0;
sub(&x,8,1);
printf("%d\n",x);
}
sub(int *a,int n,int k)
{{
if(k<=n)
sub(a,n/2,2*k);}
*a+=k;
}
搜索更多相关主题的帖子: 解析 
2010-03-15 12:19
quietstar
Rank: 2
来 自:虚无缥缈处
等 级:论坛游民
帖 子:28
专家分:98
注 册:2009-4-13
收藏
得分:3 
很糟糕的风格+很多的错误...
修改如下:
#include<iostream.h>

void sub(int *a,int n,int k);

int main()
{
    int x = 0;
    sub(&x,8,1);
    cout<<x<<endl;
    return 0;
}

void sub(int *a,int n,int k)
{
    if(k<=n)
    {
        sub(a,n/2,2*k);
    }
    *a+=k;
}
答案是7。解释如下:
sub是一个递归函数,结束的条件是n的一半大于等于k的2倍;在本例中,n是8,k是1,第一次调用的时候k值是1,然后递归调用二次,每次递归的k值分别是2、4;整个过程*a+=k这条语句共执行三次,所以最终*a=1+2+4=7。程序实际是想找出符合递归条件的k值的和。ps:是不是有哪个数学公式是这样子描述的?

流光穆然去,美梦随佳人。薄雾似成雨,芳樽清茶冷。郁郁清风外,悠然不复生。
2010-03-15 12:51
quietstar
Rank: 2
来 自:虚无缥缈处
等 级:论坛游民
帖 子:28
专家分:98
注 册:2009-4-13
收藏
得分:2 
几点错误:
1、main函数应当设置为返回int类型;
2、sub函数未声明就调用的;
3、使用printf函数要包含头文件<stdio.h>。
几点建议:
1、printf函数是c的遗留产物,建议采用c++的cout;
2、{符号单独占用一行;
3、sub函数体里面,*a+=k语句之前不用加{}。
4、传递一个指针,还不如让函数返回结果值(当然这点见仁见智了,指针这东西,能不用就不用了..)

流光穆然去,美梦随佳人。薄雾似成雨,芳樽清茶冷。郁郁清风外,悠然不复生。
2010-03-15 12:59
wei0000
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:80
专家分:136
注 册:2010-3-12
收藏
得分:0 
答案是6啦,不是每次递归都运行*a+=k;只是递归完后运行*a+=k
2010-03-15 20:16
雪色朝阳
Rank: 2
等 级:论坛游民
帖 子:36
专家分:43
注 册:2010-3-10
收藏
得分:0 
回复 3楼 quietstar
嗯,谢谢,分析得很透彻!明白了!~
2010-03-15 20:47
快速回复:写出下题的答案及解析过程!谢谢啦!
数据加载中...
 
   



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

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