《程辅》上一题!望高手赐教!!小弟不懂!!

xfr_1982 2003-08-19 01:53:46
题目为求一个树组的前5个数的和!用的是递归方法!!
#include <math.h>
#include <string.h>
#include <stdio.h>
int s_um(int a[],int n)
{
if(n>0)
return (s_um(a,n-1)+a[4]);
else
return 0;
}
main()
{
int a[7]={1,2,3,4,5,6,7};
int sum=0;
sum=s_um(a,5);
printf("qian 5ge yuan su de he wei:%d",sum);
}
但是运行以后结果为25!与原意不符!!望高手指教二三!!
...全文
26 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xfr_1982 2003-08-24
  • 打赏
  • 举报
回复
谢谢小干大哥!!
zcsd 2003-08-23
  • 打赏
  • 举报
回复
就你的程序改了一下:
#include <math.h>
#include <string.h>
#include <stdio.h>
int s_um(int a[],int n)
{
if((n-3)>=0)
return (s_um(a,n-1)+a[n-3]);
else
return 0;
}
void main()
{
int a[7]={1,2,3,4,5,6,7};
int sum=0;
sum=s_um(a,7);
printf("qian 5 ge yuan su de he wei: %d\n",sum);
return;
}
Zeroins 2003-08-23
  • 打赏
  • 举报
回复
支持 cdxiaogan(小干)
sscwxch 2003-08-21
  • 打赏
  • 举报
回复
楼主好好看看递归方面的资料
cdxiaogan 2003-08-19
  • 打赏
  • 举报
回复
晕,我又把你源程序重新在TC下调了一下
把a[4]改成a[n-1],结果是15,正确结果
你原来是25,错误结果
你用的什么编译器,如果是TC的话
你把上次编译得到的 .obj 和 .exe文件全部删掉,连备份文件 .bak 也删掉
把a[4]改成a[n-1]重新编译执行
我就不信结果不对!!!!
xfr_1982 2003-08-19
  • 打赏
  • 举报
回复
大虾快说一下啊:
语句return (s_um(a,n-1)+a[4]);
改成return (s_um(a,n-1)+a[n-1]);
没有什么差别啊????出招啊!大虾!!我接招了!谢谢!!
cdxiaogan 2003-08-19
  • 打赏
  • 举报
回复
靠,晕死,这么简单个递归
语句return (s_um(a,n-1)+a[4]);
改成return (s_um(a,n-1)+a[n-1]);
搞定,看看你写成什么了!
zss6587 2003-08-19
  • 打赏
  • 举报
回复
我帮你改了一下:

#include <math.h>
#include <string.h>
#include <stdio.h>

int s_um( int a[ ], int n )
{
int ret = a[ n ];

if( n > 0 )
ret += s_um( a, n - 1 );

return ret;
}

void main( )
{
int a[ 7 ] = { 1, 2, 3, 4, 5, 6, 7 };
int sum = 0;

sum=s_um( a, 5 );

printf( "qian 5ge yuan su de he wei: %d\n\n", sum );
}

跟你的风格一样,我也没有加入任何断言检测。你看一下你自己的代码:

if(n>0)
return (s_um(a,n-1)+a[4]); // 注意:这时你把 a[ 0 ] 给落了, 所以
// s_um( a, 5 ) = 20 :(
递归调用千万千万要注意,比如你这个条件就用得很玄.
godhate 2003-08-19
  • 打赏
  • 举报
回复
sum=s_um(a,5);
这个好像也不对!
sum=s_um(a,4);
xfr_1982 2003-08-19
  • 打赏
  • 举报
回复
回复人: tjianliang(乡关何处) ( ) 信誉:100 2003-08-19 14:12:00 得分:0
输出的是20呢??????怎么会事啊!!
高手出招吧!我招架的住的!!谢谢!!切磋一下吗!!
亮剑_ 2003-08-19
  • 打赏
  • 举报
回复
而且C语言数组的下标是从0开始的,上面的算法的数组下标好像是从1开始的,还要小小修改一下吧
亮剑_ 2003-08-19
  • 打赏
  • 举报
回复
// 第7行
return (s_um(a,n-1)+a[4]);

是不是
return (s_um(a,n-1)+a[n]);

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧