亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

求解惑啊被困擾好幾天了!

#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語言入門
  • 參與學習       926904    人
  • 解答問題       21532    個

C語言入門視頻教程,帶你進入編程世界的必修課-C語言

進入課程

求解惑啊被困擾好幾天了!

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號