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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

剛學了c語言入門5-7的課程,有一個問題請教?

剛學了c語言入門5-7的課程,有一個問題請教?

C
Dancing_code 2016-10-17 00:11:38
#include <stdio.h>/* 定義獲取單詞數量的函數 */int a;int getWordNumber(int n){?? ??? if(n == 1)??? {??????? return 1;??? ??? }??? else?{??? ?a=getWordNumber(n-1)+n ;? ????? printf("%d\n",a);????? ??? ??}}int main(){??? int num = getWordNumber(10);???? //獲取會了的單詞數量??? printf("第10天記了:%d個單詞。\n", num);??? return 0;}其實我就是在else里面最后一行刪掉了一個return a;,但這個程序前面運行出來的結果就和原來結果完全不同。。而是3,5,6,7,8,9,10,12,13。我就是想知道是怎么計算出來的這一列數??百思不得其解,萬望大神指點??!
查看完整描述

2 回答

已采納
?
onemoo

TA貢獻883條經驗 獲得超454個贊

首先說,有返回類型的函數,每一個返回分支處都應該返回適當的值。 如果你刪掉了getWordNumber函數中else分支里的return語句,那么函數在運行到else分支退出時會返回什么? ?答案是返回值是不確定的,返回什么都有可能。所以最后的結果肯定不同。 因為返回值都可能是不確定的,究其結果也沒有意義。


其次,這代碼是“遞歸”,遞歸是有相應的邏輯的,你刪掉代碼也就實現不了遞歸的邏輯了。 如果你還沒理解什么是遞歸的話,我在老問答區有一個回答:http://www.xianlaiwan.cn/qadetail/90499? ?雖然不是講解這道題的,但解釋了遞歸的邏輯。

針對這代碼,你應該在else分支處返回?getWordNumber(n-1)+n 的值。

查看完整回答
反對 回復 2016-10-17
?
編程之夜

TA貢獻29條經驗 獲得超70個贊

自己設斷點調試
查看完整回答
1 反對 回復 2016-10-17
  • 2 回答
  • 1 關注
  • 1350 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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