为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C C# C++
HEL3812501 2016-08-20 12:08:03
#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;}
查看完整描述

2 回答

已采纳
?
凌小天3635910

TA贡献17条经验 获得超13个赞

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

这个是这个函数的递归步骤。有的简单的问题可以通过公式法或循环代替的,不过对于例如费波纳茨数列之类的问题显然递归是更好的方法。

查看完整回答
1 反对 回复 2016-08-20
  • 2 回答
  • 0 关注
  • 2166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信