c 程式設計對於遞迴函式的使用 應用於揹包問題

2025-01-09 17:00:07 字數 2438 閱讀 6036

1樓:二月廬

這個是 《演算法導論》上面的題目。

使用二分查詢,對每乙個a,查詢(m-a)。

求助一道c++揹包問題 需要用遞迴的方法解決

2樓:磚頭

1.排序,刪掉大於s的物品。

2.編碼,放入為1,不放入為0。乙個編碼100111…就是一種物品的選擇。

3.從00000開始到11111,遍歷一遍就ok了。

想用遞迴的話。

1.排序,從小到大。

2.從0000開始,如果總質量小於s,2進位序列加1,作為變數傳送到下一層遞迴函式中。

3.如果大於s,返回0

4.如果等於s,返回1以及當前的2進位序列。

最簡單的揹包問題!用c++!

3樓:傲世修羅王

求所有解可以用回溯法,求最優解一般用動態規劃或者貪心策略。

因為題目要求所有解,故採用回溯。

先建模:此題目等價於自然數拆分,給定乙個自然數n,將n拆分成n1 + n2 + nn,使得n1 + n2 + nn = n,且n1, n2, .

nn中無重複數,求所有可能的拆分情況。這裡n相當於t,n1, n2,..nn相當於w1,w2,。。

wn。建模完畢!

上**:#include

using namespace std ;

儲存可行解。

int a[100] ;

輸出乙個可行解。

void output(int *a, int n)// 驗證當前解是否可行。

bool isok(int* a, int curindex, int curvalue)

對自然數n進行拆分,t用來控制拆分個數void partition(int n, int t, int *b) }

int main(void)

/ 揹包容量為10,從b中選若干件物品,使這些物品總量為10partition(10, 0, b) ;

system("pause") ;

return 0 ;}

4樓:網友

這些問題自己想想或者查一下資料再做不是比問人更好嗎?

c++程式設計:用遞迴函式求n!,其中n從鍵盤輸入。

5樓:敬憐晴蕢佩

乙個函式在它的函式體內呼叫它自身稱為遞迴呼叫。這種函式稱為遞迴函式。c語言允許函式的遞迴呼叫。

在遞迴呼叫中,主調函式又是被調函式。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。

例如有函式f如下:

intf(int

x)這個函式是乙個遞迴函式。但是執行該函式將無休止地呼叫其自身,這當然是不正確的。為了防止遞迴呼叫無終止地進行,必須在函式內有終止遞迴呼叫的手段。

常用的辦法是加條件判斷,滿足某種條件後就不再作遞迴呼叫,然後逐層返回。下面舉例說明遞迴呼叫的執行過程。

例】用遞迴法計算n!

用遞迴法計算n!可用下述公式表示:

n!=1n=0,1)

n×(n-1)!

n>1)

按公式可程式設計如下:

longff(int

n)main()

程式中給出的函式ff是乙個遞迴函式。主函式呼叫ff

後即進入函式ff執行,如果n<0,n==0或n=1時都將結束函式的執行,否則就遞迴呼叫ff函式自身。由於每次遞迴呼叫的實參為n-1,即把n-1的值賦予形參n,最後當n-1的值為1時再作遞迴呼叫,形參n的值也為1,將使遞迴終止。然後可逐層退回。

下面我們再舉例說明該過程。設執行本程式時輸入為5,即求5!。在主函式中的呼叫語句即為y=ff(5),進入ff函式後,由於n=5,不等於0或1,故應執行f=ff(n-1)*n,即f=ff(5-1)*5。

該語句對ff作遞迴呼叫即ff(4)。

進行四次遞迴呼叫後,ff函式形參取得的值變為1,故不再繼續遞迴呼叫而開始逐層返回主調函式。ff(1)的函式返回值為1,ff(2)的返回值為1*2=2,ff(3)的返回值為2*3=6,ff(4)的返回值為6*4=24,最後返回值ff(5)為24*5=120。

6樓:事事有成

void fact(int n)

應該是這樣吧,在用個main函式呼叫它就行了。

揹包問題的遞迴與非遞迴c++演算法實現

7樓:

如果你是想學寫程式,建議你手動,如果你是想抄**,建議你抄同學的。如果你需要乙份**,你出點錢我可以幫你寫。

8樓:網友

揹包問題不好遞迴,動態規劃做的。

c++程式設計:如何編寫乙個遞迴函式,輸出vector物件的內容

9樓:網友

遍歷vector,然後輸出?這個不能用遞迴做,會棧溢位的。

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 中...

c語言問題用函式的遞迴求6的階乘求程式設計

這道題考察基本功,要對變數值的變化理解了 include stdio.h int ok int a main include int recursion int n int main c語言怎麼用遞迴呼叫函式的方法求n的階乘?1 開啟vc6.0軟體bai,新建 一個duc語言的專案 2 接zhi下來...

c程式設計 main函式帶命令列引數的使用

這是不可能的!請採納 main 函式及其引數 c 標準允許主函式main 有或沒有引數列表。您能在主函式main 中使用一個或更多的引數。如下是一些慣例 int main int argc,char argv 第一個引數argc,指明有多少個引數將被傳遞給主函式main 真正的引數以字串陣列 即第2...