为什么单纯用getwordnumber(n-1)+n就可以递加并算出答案位55,不可以用(
#include
/* 定义获开单词数量的函数 */
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;
}
|
免责声明:本内容仅代表回答会员见解不代表天盟观点,请谨慎对待。
版权声明:作者保留权利,不代表天盟立场。
|
|
|
|
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
这个是这个函数的递归步骤。有的简单的问题可以通过公式法或循环代替的,不过对于例如费波纳茨数列之类的问题显然递归是更好的方法。 |
|
|
|
|