问答详情
源自:5-7 递归函数(一)

函数 getWordNumber为什么在n-1=1是就不再运行了

#include <stdio.h>

/* 定义获取单词数量的函数 */

int getWordNumber(int n)

{   

    if(n == 1)

    {

        return 1;    //第一天只会1个单词

    }

    else{

        return getWordNumber(n-1)+n;       //到第天会的单词数量

    }

}

int main()

{

    int num = getWordNumber(10);     //获取会了的单词数量

    printf("小明第10天记了:%d个单词。\n", num);

    return 0;

}


提问者:weixin_慕先生019299 2019-12-12 07:26

个回答

  • 慕码人705974
    2019-12-12 23:08:15

    首先,return是结束这个循环,将值输入到主函数          (下文中getWordNumber用GWN代表)

    这个GWN函数有两种结束循坏的方式,一种是n等于1时,符合If语句的条件,输出return 1,说明停止循坏并且将1这个值输入到主函数,然后这里主函数就会输出该值(num=1),一种是n不等于1时,不符合If语句的条件,就会输出else语句的return,而这个return语句后面还有一个GWN(n-1)的函数,这个跟着一起被输入主函数,但此时这个循环并没结束,会继续被自身调用,这就是递归函数,比如,下一个GWN(9),那么这个GWN(9)代表在getWordNumber这个函数中在n=9的情况下继续做循环,最后输出的是GWN(8)+9+10(备注:这里的10是上一次循环中GWN(10-1)+10的10),同理,接下来的GWN(8)也会继续按照这样循环,最后到GWN(n-1)中的n-1=1时,这时就符合if语句的条件,就会输出return 1,这时才代表在else return后的这个GWN(n-1)函数才完全停止循环,而这时在主函数输出的是num=[GWN(1)=1]+2+3+4+5+6+7+8+9=55

    本人也是菜鸟一枚,初次作答,以上是我的个人的理解,如有不对,还望大神指正。