#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;
}
每一次调用n的值分别变成了多少啊,求举几个列子
比如 n=10 的时候
(10-1)+10=19
那么第二次循环n的值分别为多少啊,我只能看懂第一个
第二个的n值就是当前函数里面刚开始时候括号里面的值,
我理解的就是,,,一直循环使用自身,但是值不一样,第一次的n是10 第二次的n就相当于上个的n-1,也就是9,第三次的n就是9-1,也就是8,第四次的n就是8-1,也就是7~~~~~~~一直到最后一次的时候的n的值是1,就直接返回1,然后在开始往回走,慢慢的每个n值相加,最后就是相加的值,emmmmmm我不会堆栈什么的,我自己理解的,就是嗯,一层一层套,慢慢的就套出了答案。
首先你要理解什么是递归。
递归属于逆向思维,我们平常的思维方式属于递推,也就是从1到100。
如何知道到第N天小明学会了多少个单词?很简单啊,昨天学会的加上今天的天数就是了嘛。
那昨天学会了多少?很简单啊,前天学会多少加上昨天的天数不就知道了吗?
那前天学会了多少怎么知道呢?同上。
我们只需关心本次的结果即可。