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

计算数的定义问题

#include <stdio.h>

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

int getWordNumber(int n)

{   

    if(n == 1)

    {

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

    }

    else{

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

    }

}

int main()

{

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

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

    return 0;

}

为什么 return getWordNumber(n+1)*(n/2);       //到第天会的单词数量,这里n-1就有结果,而n+1为什么没有结果呢?难道是超过了n的定义数了吗?


提问者:swing997 2015-09-18 10:31

个回答

  • Virture
    2015-09-18 15:28:20

    http://img.mukewang.com/55fbbb740001359e06900454.jpg


    这是阶乘的递归示意图,仅供参考。练习中的函数n==1时,就会return 1;所以参数是10时,要不断的减一,直到n==1时返回1,n为2时,getWordNumber(2-1)*(2/2)等于1.如果是加一,那么就没有数n==1时,就会return 1这个条件作参考,就不能推导出getWordNumber(10)的值了

  • Virture
    2015-09-18 14:06:33

    请查阅递归推导。必须n-1,而不能n+1。