函數 getWordNumber為什么在n-1=1是就不再運行了
#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;
}
2019-12-12
首先,return是結束這個循環,將值輸入到主函數 ? ? ? ?? (下文中getWordNumber用GWN代表)
這個GWN函數有兩種結束循壞的方式,一種是n等于1時,符合If語句的條件,輸出return 1,說明停止循壞并且將1這個值輸入到主函數,然后這里主函數就會輸出該值(num=1),一種是n不等于1時,不符合If語句的條件,就會輸出else語句的return,而這個return語句后面還有一個GWN(n-1)的函數,這個跟著一起被輸入主函數,但此時這個循環并沒結束,會繼續被自身調用,這就是遞歸函數,比如,下一個GWN(9),那么這個GWN(9)代表在getWordNumber這個函數中在n=9的情況下繼續做循環,最后輸出的是GWN(8)+9+10(備注:這里的10是上一次循環中GWN(10-1)+10的10),同理,接下來的GWN(8)也會繼續按照這樣循環,最后到GWN(n-1)中的n-1=1時,這時就符合if語句的條件,就會輸出return 1,這時才代表在else return后的這個GWN(n-1)函數才完全停止循環,而這時在主函數輸出的是num=[GWN(1)=1]+2+3+4+5+6+7+8+9=55
本人也是菜鳥一枚,初次作答,以上是我的個人的理解,如有不對,還望大神指正。