C语言练习求救

sgye_990 2018-03-12 09:08:21
正在学习C,遇到问题实在没有办法了,求救
#include <stdio.h>
#include <stdlib.h>

int fun(int a[ ],int n)
{
if(n>=1)
return fun(a,n-1)+a[n-1]; // fun(a,n-1)里面的a,n-1是什么算法?
else
return 0;
}
int main()
{
int x[7]={1,2,3,4,5,6,7},s;
s=fun(x,7);
printf("%d\n",s);
return 0;
}

运行结果是28,但是函数调用看得不是很明白,请大家指教,谢谢了
...全文
744 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-13
  • 打赏
  • 举报
回复
看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
sgye_990 2018-03-13
  • 打赏
  • 举报
回复
赵4老师: 查看Call Stack,需要汇编知识才看懂吗? 汇编还没有学,我准备学完C语言才看看汇编
sgye_990 2018-03-13
  • 打赏
  • 举报
回复
谢谢大家的热心指教!
引用 5 楼 zhao4zhong1 的回复:
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
刚刚入门,现在的水平只是在 codeblocks 编译程序,也就是简单的“build and run”,你说的感觉挺高大上啊? 非常感兴趣,是什么编译工具? 学习C语言用什么IDE调试好呢?
自信男孩 2018-03-12
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int fun(int a[],int n)
{
    if(n>=1)
        return fun(a, n-1) + a[n-1];
    else
        return 0;
}
int main()
{
    int x[7]={1,2,3,4,5,6,7},s;
    s = fun(x,7);
    printf("%d\n",s);
    return 0;
}
程序没什么问题 改程序func是递归函数,n-1是保证func去执行else,递归n-1最后能做到n < 1。
sgye_990 2018-03-12
  • 打赏
  • 举报
回复
引用 1 楼 Johnson_Jiang327 的回复:
这是递归调用,最终当n<1时递归返回
顿时彻悟!谢谢,马上去补
星星点大灯 2018-03-12
  • 打赏
  • 举报
回复
你可以去看看递归函数的调用
Johnson_Jiang327 2018-03-12
  • 打赏
  • 举报
回复
这是递归调用,最终当n<1时递归返回
赵4老师 2018-03-12
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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