猿问

为什么单纯用getwordnumber(n-1)+n就可以递加并算出答案位55,不可以用(n+1)*(n/2)吗?

#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;

}


HEL3812501
浏览 2167回答 2
2回答

凌小天3635910

n(n+1)/2  固然可以做到。但是这个案例的目的应该是为了举例说明递归原理。getWordNumber(n)=getWordNumber(n-1)+n=getWordNumber(n-2)+n+n-1=n+(n-1)+(n-2)+……+3+2+getWordNumber(1)=n+(n-1)+(n-2)+……+3+2+1这个是这个函数的递归步骤。有的简单的问题可以通过公式法或循环代替的,不过对于例如费波纳茨数列之类的问题显然递归是更好的方法。
随时随地看视频慕课网APP
我要回答