kljoij 发表于 2016-12-5 22:16:16

新人求教

#include <stdio.h>

int fun(int n)
{
      int s;
      if(n==1||n==2)
      {
                s = 2;
      }
      else
      {
                s = n-fun(n-1);
      }
      
      return s;
}
main()
{
      printf("%d", fun(3));
}
这道题是什么意思

kljoij 发表于 2016-12-6 19:52:46

{:10_254:}

Shiryan 发表于 2016-12-7 21:56:32

首先,程序定义了一个函数叫做“fun”,在fun函数内它又可以自己调用自己,形成了嵌套函数。
举个栗子,比如说,在main函数里要输出fun(3)的值,首先,主函数调用了子函数,现在进入了子函数里,目前n=3,n既不是1也不是2,所以s=3-fun(2),而fun(2)有调用到了fun函数,此时参数为2,满足n=2,所以此时s=2,返回s值,即fun(2)=s=2,再跳出到上一个算式,即此时s=3-fun(2)=3-2=1,返回s值,所以fun(3)=1。当n不等于3时,也是类似的,一层一层往里进,算到最后一个值时再一层一层往外出。
这种方法叫做递归法,可以百度一下扩展一下。

kljoij 发表于 2016-12-10 22:58:51

Shiryan 发表于 2016-12-7 21:56
首先,程序定义了一个函数叫做“fun”,在fun函数内它又可以自己调用自己,形成了嵌套函数。
举个栗子,比 ...

可是这里从哪体现出fun=s呢

Shiryan 发表于 2016-12-11 00:25:32

kljoij 发表于 2016-12-10 22:58
可是这里从哪体现出fun=s呢

你看这个函数刚开始定义的时候是有返回值的是个int类型的值,最后有这条语句 return s; 说明fun(n)=s的。
建议你先去弄明白函数那一章节的知识,这样应该就比较好理解了。
页: [1]
查看完整版本: 新人求教