Re: [問題] 我的寫法 跑不出老師的答案

看板C_and_CPP作者 (喲)時間15年前 (2010/10/01 01:47), 編輯推噓3(3010)
留言13則, 5人參與, 最新討論串3/3 (看更多)
※ 引述《povertytrap (povertytrap)》之銘言: : 各位大大好 小弟是第一次在C版發文 : 因為我有修資料結構 而我們老師有出個題目 是說用副程式寫出C的排列組合 : 意思是C的(m,n) m在上n在下會等於 m階/{n階*(m-n)階} 然後要用副程式寫 : #include <stdio.h> : #include <stdlib.h> : long int factor(int p); /* 函式宣告*/ : long int factor(int p) /* 函式定義*/ : { : ------------------------- : } : void main(void) : { : ------xxx= factor(int p) /* 呼叫函式*/ : } 因為說要階乘, factor 函數就是要處理階乘 (如果名字要寫對,應該寫 factorial, 階乘). 可是你以下的寫法...是抄同學的,那就不可以說是你的寫法. : 而我的寫法是 : #include <stdio.h> : #include <stdlib.h> : int factor(a,b) : { : a=1,b; : while(a>=1) : { : b*=a; : a--; : } : return b; : } m! / (n! * (m-n)!) ===> factor(m) / (factor(n) * factor(m-n)) 這種對應應該看得懂吧?? 那就可以想一下 factor 函數怎麼求階乘: 階乘就是 1 * 2 * 3 * ... * m. factor 只知道一個 m,意思就是從 1 連乘到 m. 所以,數學函數寫成: f(0) = 1 f(n) = f(n-1)*n, if n > 0 照寫成函數看看,二句分寫成二段: int factor(int n) { if (n == 0) return 1; } int factor(int n) { if (n > 0) return factor(n-1) * n; } 先把二個同名函數分開看,每個自己看起來都對. 沒有不對的,是吧? 然後,我們把二個函數放在一起,就好像拉拉鏈一樣,二個對在一起: int factor(int n) { if (n == 0) return 1; if (n > 0) return factor(n-1) * n; // 前面二個對在一起. return 1; // 剩下 n < 0 的情況,要補上去,全部的階乘功能才完整. } 這樣就很簡單完成了. 不過,你最前面提到,你有修資料結構,而老師給的是這個,求組合數目. 能問一下,這是資料結構的哪一課嗎? 或者是在資料結構之後的高等程式設計課程? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.160.208.137

10/01 02:05, , 1F
所謂的"高等"是??
10/01 02:05, 1F

10/01 02:51, , 2F
他說的「有修資料結構」不是完成式,是現在式吧。
10/01 02:51, 2F

10/01 02:53, , 3F
這東西是 Horowitz 那本聖經本第一章就會有的基本問題。
10/01 02:53, 3F

10/01 02:53, , 4F
Fundamentals of data structures in C
10/01 02:53, 4F

10/01 09:29, , 5F
蠻久以前,大學的課程會分初級程設與高等程設,以目前來看,
10/01 09:29, 5F

10/01 09:30, , 6F
就是在資料結構課之後的任何語言的程式設計吧..隨便問問而已
10/01 09:30, 6F

10/01 09:31, , 7F
FDS這本書,給我較深的印象是用ADT說明陣列是什麼.
10/01 09:31, 7F

10/01 20:27, , 8F
我只知道我們現在學得應該是C++
10/01 20:27, 8F

10/01 23:56, , 9F
這篇y大寫的是數學概念->實作方法, 裡面也沒有用到什麼
10/01 23:56, 9F

10/01 23:56, , 10F
C或C++特有的東西, 用的是語言基本元素加上所謂遞迴的
10/01 23:56, 10F

10/01 23:57, , 11F
實作方式完成那個f function的@_@"
10/01 23:57, 11F

10/02 10:23, , 12F
對嘛,感覺不像是資料結構會講的作業,應該是學C++就可以做了.
10/02 10:23, 12F

10/02 10:24, , 13F
f function! 哦,把factor筆誤為f了...
10/02 10:24, 13F
※ 編輯: yauhh 來自: 218.160.208.1 (10/02 10:25)
文章代碼(AID): #1CfCqnC4 (C_and_CPP)
文章代碼(AID): #1CfCqnC4 (C_and_CPP)