那谁很靠谱3587144
2016-10-24 15:33
#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;
}
递归函数,是碰到什么条件停止循环的?到最后为什么不是getWordNumber(1-1)+1?
因为getWorldNumber的值已经确定了是1,所以就不会再继续执行getWorldNumber(n-1)+n了。
在主方法main中调用了getWordNumber方法,当函数走到int num = getWordNumber(10)时又会返回去调用getwordNumber方法;反复执行直到满足递归函数终结条件停止;
递归函数的执行过程:执行时遇到getWordNumber(10),保存当前的n(n-1)+n以及getWordNumber(10)执行完后的返回地址;然后继续执行,继续对局部变量和函数返回地址入栈保存。直到遇到递归结束条件,开始弹栈,这是将栈顶n域值恢复给n,栈顶地址域作为返回地址出栈,继续这样下去,直到栈空
回复 JustWannaHugU:#include <stdio.h>
/* 定义获取单词数量的函数 */
int getWordNumber(int n)
{
if(n == 1)//那么,最后为什么不是直接输出这个呢?如果这个不成立,不是才执行下面的else吗?
{
return 1;
}
else
{
return getWordNumber(n-1)+n ; //这里一直最后会成(1-1)+1对吗????
}
}
int main()
{
int num = getWordNumber(10); //获取会了的单词数量
printf("小明第10天记了:%d个单词。\n", num);
return 0;
}
C语言入门
926020 学习 · 20793 问题
相似问题