用c語言的遞迴解決分魚問題,用C語言的遞迴解決分魚問題

2022-02-16 05:06:31 字數 6097 閱讀 6126

1樓:單身向右

下面**是我自己寫的,看別人**比較累,所以如果樓主願意,可以看看下面的**,我會盡量講解細緻一點。

#include

//sub(manth,fishleft)引數意義:manth表示第幾個人分魚,fishleft表示他分魚時獲得了多少魚

//函式的返回結果是第manth個人分魚時剩餘的條數,如manth = 5,fishleft = 1,則表示一共捕獲了3906條魚。

int sub(int manth,int fishleft)

fishleft = 5*sub(--manth,fishleft)+1;

printf("manth = %d,fishleft = %d\n",manth+1,fishleft);

return fishleft;

}int main(void)

//我得到的結果和樓主所給程式執行結果不一致!樓主可以自己計算,如果最後一個人得到的是1條魚,則他分魚時應該剩餘6條,manth = 2時應該剩餘6*5+1 = 31條,manth = 3時,應該剩餘31*5+1條,最後manth= 5,也就是分魚開始的時候,應該剩餘3906條魚。

//樓主可以用自己的程式測試,當呼叫sub(2)時得到的是21,而不是31,就能證明該程式應該是用問題的。

2樓:匿名使用者

這個程式寫的不夠簡潔明瞭,它用了一個static int i全域性變數來傳遞遞迴之間的資料。

題目可以抽象成這樣子,就是求得一個自然數n,這個數由(5k+1)構成,同時4k也是由(5i+1)構成,4i是由(5j+1)構成,以此類推,分幾次魚,這個迭代就執行幾次。

所以最簡單的方法是列舉,列舉自然數n,然後驗證它以及它的子集4k,是否滿足構成。

#include

int sub(int n,int d) /*定義函式遞迴求魚的總數*/

main()

3樓:匿名使用者

譚浩強不是把遞迴說的很明白了嗎,你要將問題不斷分解啊,不要一味看別人的**,這樣沒用的。

設n為總魚數

n-1/5 *4=a拿走後剩餘的

變形:n=a拿走後剩餘的*(5/4) + 1

a拿走後剩餘的-1/5 * 4 =b拿走後剩餘的;

變形:a拿走後剩餘的=b拿走後剩餘的*5/4 + 1

...d拿走後剩餘的=e拿走後剩餘的*5/4 + 1

因此只要確定e拿走後剩餘的條數,總條數既可以求得。

int sub(int n) /*定義函式遞迴求魚的總數*/

while (i % 5 != 0);//求得第4個拿走後剩餘的魚數i,注意不是第5個拿走後的

return (i + 1);

}else

while (t % 4 != 0);//剩餘的魚數一定要被4整除

return (t / 4 * 5+1);//公式來的}}

自己參悟吧,最重要是弄懂遞迴分析方法,以不變應萬變。

c語言中?:和!是什麼意思,怎麼運用在程式設計中

4樓:匿名使用者

?: 是條件運算子,使用的格式如下 (條件)?a:b ,如果條件成立,表示式的值就是a,否則是b

!是用來取非運算的,!true的結果就是 false !false 的結果是 true

寫程式中,?:用的比較少,!主要永愛條件判斷中

5樓:匿名使用者

?:條件運算子

類似於if else , 例如 x等於a,b中較大的那個 , ( a > b ) ? (x = a ): (x = b) 或者 x = (a > b) ? a : b

!是非運算子

邏輯取反的意思,例如 if (!( x = 5 )) 等同 if ( x != 5 ) 這個意思,不知明白沒

6樓:超級餅餅乾

?:的意思是條件運算子,使用的格式如下(條件)?a:b,如果條件成立,表示式的值就是a,否則是b。

!的意思是用來取非運算的,!true的結果就是 false  !false 的結果是 true。

寫程式中,?:用的比較少,!主要用在條件判斷中。

延展回答:

1、c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

2、儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。

3、c語言一共只有32個關鍵字,9種控制語句,程式書寫形式自由,區分大小寫。把高階語言的基本結構和語句與低階語言的實用性結合起來。c 語言可以像組合語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。

c語言程式設計的平臺是什麼?

7樓:非常可愛

1、gcc,gnu組織開發的開源免費的編譯器;

2、mingw,windows作業系統下的gcc;

3、clang,開源的bsd協議的基於llvm的編譯器;

4、visual c++ :: cl.exe,microsoft vc++自帶的編譯器。

擴充套件資料

選擇開發平臺注意事項

一、windows

開發環境:visual studio

特點:整合開發環境、簡單易用、完整的工具集

缺點:需要授權(也有免費版)體積龐大、無法學習到背後工程**組織情況、不利於初學者掌握**編譯、連結過程、工程管理

二、unix 或者類unix (包過aix,open solaris ,*bsd, linux)

開發環境:編譯工具 gcc、clang ...等等

**編輯器:vim、emacs等

工程組織:make,cmake

特點:作業系統整合很多工具,所有的工具幾乎開源且免費、短小精悍、功能強大

缺點:需要自己動手搭建開發環境、熟悉編譯工具、

熟悉編輯器操作、熟悉類unix作業系統的操作。

入門門檻高需要在命令模式下使用指令碼、make等工具完成開發工作

8樓:匿名使用者

程式設計平臺有很多,如keil c環境,ue,vc等。很多。

編譯環境有這些開發環境自帶的,也有類似linux系統中的gcc。

9樓:匿名使用者

有很多的vc6.0,vs2008、2010等

10樓:坧頭

有很多的 常用的vs

c語言程式設計中,sinx怎麼表示?

11樓:我是果瘋

在寫c語言的程式時,在開頭加上一個標頭檔案math.h即可。

即可直接使用sin(x),特別注意x應該為弧度制,如果不是弧度制需要轉化為弧度制。

新增標頭檔案方法:#include。

12樓:匿名使用者

首先,要用到數學函式,需要包含標頭檔案math.h

其次,如果x不是弧度,需要轉換為弧度,如果x本身是弧度,則可以寫為:sin(x)

如果x不是弧度,可以寫為:sin(60*3.1415926/180)

13樓:匿名使用者

#include

#include

int main()

14樓:匿名使用者

寫成sin(x),這是庫函式,標頭檔案是math.h

15樓:匿名使用者

sin(x)就可以吧

16樓:匿名使用者

標頭檔案里加入math.h,就有sin函式了。

fortran程式語言與c語言的區別是什麼?

17樓:哈密小狐狸

fortran語言

中可通過定義子抄程式從而返回一bai系列變數值du,而c語言的函式一般只能返zhi回一個變數值dao。

fortran語言的最大特性是接近數學公式的自然描述,在計算機裡具有很高的執行效率。易學,語法嚴謹。可以直接對矩陣和複數進行運算,這一點類似matlab。

自誕生以來廣泛地應用於數值計算領域,積累了大量高效而可靠的源程式。很多專用的大型數值運算計算機針對fortran做了優化。廣泛地應用於平行計算和高效能運算領域。

c語言是一個有結構化程式設計、具有變數作用域(variable scope)以及遞迴功能的過程式語言。c語言傳遞引數均是以值傳遞(pass by value),另外也可以傳遞指標(a pointer passed by value)。不同的變數型別可以用結構體(struct)組合在一起。

只有32個保留字(reserved keywords),使變數、函式命名有更多彈性。部份的變數型別可以轉換,例如整型和字元型變數。通過指標(pointer),c語言可以容易的對儲存器進行低階控制。

預編譯處理(preprocessor)讓c語言的編譯更具有彈性。

18樓:唐拉雅秀啦啦

如果你今後想

復從事的是軟製件工程師的工作,做專業的軟體開發,那麼毫無疑問應該學習c語言。

但如果僅僅是為了你自己的本專業中相關場合的計算問題,可以考慮學習fortran語言,它的計算能力要強於其他程式語言(因為這是專門為科學計算而發明的語言),但通用性很有限,並不適合做其他工作。

c語言是面向程式設計語言的是什麼?

c語言程式設計軟體名字叫什麼

19樓:會飛的小兔子

visual c++6.0。

microsoft visual c++是微軟公司的c++開發工具,具有整合開發環境(ide,2023年後,整合到了visual studio開發環境

),可提供編輯c語言,c++以及c++/cli等程式語言。vc++整合了便利的除錯工具,特別是整合了微軟windows視窗作業系統應用程式介面、三維動畫directx api,microsoft .net框架。

它不但具有程式框架自動生成、靈活方便的類管理、**編寫和介面設計整合互動操作、可開發多種程式等優點,而且通過的設定就可使其生成的程式框架支援資料庫介面、ole2.0,winsock網路。

擴充套件資料

visual c++使用注意事項

vc++ 6.0佔用的系統資源比較少,開啟工程、編譯執行都比較快,能夠直接新建.cpp檔案編譯執行,所以贏得很多軟體開發者的青睞。

但因為它先於c++標準推出,所以對c++標準的支援不太好。

for語句中宣告的變數i,對於vc++ 6.0來說,出了for迴圈仍能使用。但很顯然這與c++標準對於變數生存期的規定不符合。

20樓:匿名使用者

我知道的有:

windows系統:turbo c2.0,turboc3.0,c#,vc,v++,vc++

unix系統:gcc

21樓:匿名使用者

turbo c 2.0

c語言程式設計如何實現「計算圓的面積」?

22樓:新學it課堂

案例:輸入圓的半徑,計算圓的面積。

c語言程式設計中a=%d是什麼意思啊

23樓:墨汁諾

如果是a%=d則為 a=a%d(%為取餘操作),其次就是在printf輸出的時候 ,%d指定輸出的型別為整型。

定義一個變數a並賦值 a=10;輸出a的值,如果是printf("%d",a); 就直接顯示10,如果是printf("a=%d",a); 就顯示a=10 " " 雙引號裡面的按原樣輸出,其實就是輸出字串,%d 是按十進位制數輸出。

%d有符號整數(十進位制)。

%格式化符也可用於字典,可用%(name)引用字典中的元素進行格式化輸出。

可指定最小的欄位寬度,如:"%5d" % 2。也可用句點符指定附加的精度,如:"%.3d" % 3。

c語言用遞迴方法實現學號,C語言用遞迴方法實現學號1100中所有自然數的和

include int sum int n int main 1 100用c語言的遞迴法求和 1 首先本題的思路已經給出,要求用遞迴演算法。2 程式源 如下 include int sum int n int main 下面是一個遞迴求和函式 int sum int n 3 程式的輸出結果如下 in...

c語言函式遞迴呼叫的問題,C語言函式遞迴呼叫問題。

首先要知道fun 是一個定義的函式 fun a 相當於fun 3 由下面的函式定義得出fun 3 又fun 2 再求fun 0 因為0不滿足if裡的條件,所以不執行fun 1 所以是0120,希望樓主看明白 先呼叫fun 3 fun 3 中呼叫fun 2 fun 2 中呼叫fun 1 fun 1 中...

用遞迴法寫出123100的程式c語言

include int sum int n int main include int sum int n return 0 int main int fun int s else int main c語言中 用遞迴怎麼求1 2 3 4 100 是遞迴,沒有遞推一說,只有遞迴和迴圈兩種,或者直接計算,...