#include
#include
1.遞迴和非遞迴分別實現求第n個斐波那契數。
遞迴
int
fib1
(int n)
else
if(n ==2)
else
}
非遞迴 (畫儲存圖更易理解)
int
fib2
(int n)
return c;
}
int main()
2.編寫乙個函式實現n^k,使用遞迴實現
//遞迴
int
exponent_1
(int n,
int k)
else
//非遞迴
int
exponent_2
(int n,
int k)
return num;
}
void main()
思考:遞迴似乎有乙個好處,就是不用申請多餘的變數來存放返回值,而是由遞迴函式的引數表示式直接帶出。
3. 寫乙個遞迴函式digitsum(n),輸入乙個非負整數,返回組成它的數字之和
//例如,呼叫digitsum(1024),則應該返回1 + 0 + 2 + 4,它的和是7
//遞迴
int
digitsum_1
(int n)
return0;
}
//非遞迴
int
digitsum_2
(int n)
while
(n);
return sum;
}
4. 編寫乙個函式 reverse_string(char * string)(遞迴實現)
//實現:將引數字串中的字元反向排列。
//要求:不能使用c函式庫中的字串操作函式。
void
reserve_string
(char
* str)
//二 只有edcb
/*if (*str != '\0') */
//三 只有edcb,因為指標指向變了
/*if (*str != '\0') */
//四 0x003f5929 處有未經處理的異常: 0xc00000fd: stack overflow (引數: 0x00000001, 0x008e2f70)
/*if (*str != '\0') */
printf
("%c "
,*str)
;}
思考:還是沒搞懂,怎麼檢查才能發現問題所在
第二、三種**:str指標變化,導致直接指向 b
第四種**:未經處理的異常: 0xc00000fd: stack overflow
拓展:
#include
#define ndebug
#include <
assert
.h>
#include
int
strlength
(char
* string)
return count;
}
啊啊啊啊啊啊啊啊啊……遇到字串逆序還是好繞啊!!
5.遞迴和非遞迴分別實現strlen
遞迴
int
strlen_1
(char
*str)
else
}
非遞迴
int
strlen_2
(char
* string)
return count;
}
思考:對比第四題遞迴實現的函式 reverse_string(char * string) 中的 str++,為什麼結果是正確的,是因為遞迴和非遞迴的區別導致的嗎?
int
strlen_3
(char str)
思考:為什麼直接寫 for (int i = 0; str[i] != 『\0』; i++) 會報錯變數 i 是未定義,未宣告的識別符號?
int
strlen_4
(char
*str)
思考:陣列和指標的界限比較模糊,最後一種非遞迴方法不太好嗎?
6.遞迴和非遞迴分別實現求n的階乘
遞迴
int
factorial_1
(int n)
else
}
非遞迴
int
factorial_2
(int n)
else
return num;
}}
思考:由該題目的兩種**可以發現,非遞迴方法好像就是將遞迴轉化為迴圈
7.遞迴方式實現列印乙個整數的每一位
void
print
(int x)
}void
main()
語句執行順序:
進入print(204)
—》 num = 4, x = 20, 進入print(20)
—》num = 0, x = 2, 進入print(2)
—》 num = 2, x = 0, 進入print(0)
—》 //do nothing//, 結束print(0);
返回print(2)過程, 緊接著print(0)語句後面列印 num=2, 結束print(2);
返回print(20)過程, 緊接著print(2)語句後面列印 num=0, 結束print(20);
返回print(204)過程, 緊接著print(20)語句後面列印num=4, 結束print(204)
—》完成每一位的列印
如果將上述**寫成:
void
print
(int x)
printf
("%d "
, num)
;}
則會提示錯誤:
run-time check failure #3 - the variable 'num' is being used without being initialized.
這是為啥嘞? 求解 >3< c語言練習題合集2
有乙個3 4的矩陣,要求程式設計序求出其中值最大的那個元素的值,以及其所在的行號和列號。include intmain max a 0 0 for i 0 i 3 i printf 最大的元素是 d,在 d行,在 d列 max,i,j 輸入一行字元,統計其中有多少個單詞,單詞之間用空格分隔開。inc...
C語言練習題 遞迴
會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。對於某個滿足要求的8皇后的擺放方法,定義乙個皇后串a與之對應,即a b1b2 b8,其中b為相應擺法中第i行皇后所處的列數。已經知道8皇后問...
經典簡單C語言合集
乘法口訣表 include includeint main printf n return 0 求100到200間的素數 include includeint main return0 求1000年到2000年之中的閏年 include includeint main return 0 交換兩個整數...