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

求解惑啊被困扰好几天了!

#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的值分别为多少啊,我只能看懂第一个

正在回答

3 回答

第二个的n值就是当前函数里面刚开始时候括号里面的值,

1 回复 有任何疑惑可以回复我~

我理解的就是,,,一直循环使用自身,但是值不一样,第一次的n是10 第二次的n就相当于上个的n-1,也就是9,第三次的n就是9-1,也就是8,第四次的n就是8-1,也就是7~~~~~~~一直到最后一次的时候的n的值是1,就直接返回1,然后在开始往回走,慢慢的每个n值相加,最后就是相加的值,emmmmmm我不会堆栈什么的,我自己理解的,就是嗯,一层一层套,慢慢的就套出了答案。

0 回复 有任何疑惑可以回复我~
#1

慕仰103958 提问者

我给你想的差不多,不过第二个n的值是怎么变化的呢?就是(n-1)+n 后边这个n
2018-11-21 回复 有任何疑惑可以回复我~

首先你要理解什么是递归。

递归属于逆向思维,我们平常的思维方式属于递推,也就是从1到100。

如何知道到第N天小明学会了多少个单词?很简单啊,昨天学会的加上今天的天数就是了嘛。

那昨天学会了多少?很简单啊,前天学会多少加上昨天的天数不就知道了吗?

那前天学会了多少怎么知道呢?同上。

我们只需关心本次的结果即可。

2 回复 有任何疑惑可以回复我~
#1

慕仰103958 提问者

还是不懂。。。。能不能直接把第二次循环的数值写一下,简单明了, 比如第二次(n—1)+n,n的值分别是多少
2018-11-20 回复 有任何疑惑可以回复我~
#2

慕仰103958 提问者

还有他这个函数,是怎么相加的呢,有点迷,为什么会自己加上,上一次的值
2018-11-20 回复 有任何疑惑可以回复我~
#3

Andd_Dev 回复 慕仰103958 提问者

迷就对了,,你连堆栈都不知道呢你肯定迷啊。 想了解递归你先看看内存‘栈’方面的知识吧。
2018-11-20 回复 有任何疑惑可以回复我~
#4

Andd_Dev 回复 慕仰103958 提问者

小明1天学1个单词 第2天学2个单词。 如果求3天小明学了多少单词,那就n=3; getWordNumber(n-1)+n 就等于 「3 加上 你又调用了一次getWordNumber(2)函数」 传入2是因为3-1等于2这你看得懂吧。 所以到这里就是:「getWordNumber(2) + 3」,没问题吧?
2018-11-20 回复 有任何疑惑可以回复我~
#5

Andd_Dev 回复 慕仰103958 提问者

if n == 1 返回1 2不等于1 所以继续走下面的else, getWordNumber(n-1)+n; n的值在这次调用等于2 所以算上上面的写出来就是: 「getWordNumber(1) + 2 + 3」 因为你又调用了getWordNumber()函数,传入的是1,那么走到if n == 1 return 1;
2018-11-20 回复 有任何疑惑可以回复我~
#6

Andd_Dev 回复 慕仰103958 提问者

所以总体写成人能看懂的就是: 「1 + 2 + 3」 还看不懂的话,给你两个建议。 1、把基础语法、关键字、数据类型全都背熟。2、去查一查什么是堆栈数组,了解一下数据结构。 了解过这些知识点之后,递归都不用别人特意告诉你,你扫一眼就能看懂。
2018-11-20 回复 有任何疑惑可以回复我~
#7

慕仰103958 提问者 回复 Andd_Dev

好的,现在有点理解了,等会去网上学习一下内存知识 请问自学c又没有什么好的推荐呢,我学c是为了给c++打基础
2018-11-20 回复 有任何疑惑可以回复我~
#8

Andd_Dev 回复 慕仰103958 提问者

想学C++直接去学C++好了,没必要‘自底向上’的学,毕竟不是完全一样的语言,你熟悉了一个再去学一个很像的兄弟,没什么必要,当然话说回来主要还是看你自己的需求。 书籍推荐我就不班门弄斧了,我也是跑来学C才到这来的? 不过可以推荐你一个文章,http://zh.lucida.me/blog/on-learning-algorithms/ 你可以花点时间看一下自行斟酌需不需要花时间学一学数据结构和算法。 编程要学的东西蛮多的,慢慢来~
2018-11-20 回复 有任何疑惑可以回复我~
#9

慕仰103958 提问者 回复 Andd_Dev

嗯,太谢谢了。共同努力
2018-11-20 回复 有任何疑惑可以回复我~
查看6条回复

举报

0/150
提交
取消
C语言入门
  • 参与学习       926207    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

求解惑啊被困扰好几天了!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信