當前位置:首頁 » 編程軟體 » 組合子編程

組合子編程

發布時間: 2024-04-23 01:01:15

① C編程:600個雞蛋放到10個籃子里來賣。當買雞蛋的說出買的個數時,便可以由這10籃子組合得到。

運用貪心演算法
首先第一個盒子里放1(2的0次方)個,第二個盒子里放2(2的1次方)個,第三個盒子放4(2的2次方)個....第九個盒子放256(2的8次方)個,還剩89個放第十個盒子里。若買的雞蛋小於512個,則可以由前面九個盒子組合得到。若大於或等於512個,則必須用到第十個盒子中的雞蛋。且每次選擇都從雞蛋個數最多且小於需要或等於數目的盒子開始。

代碼:
#include<stdio.h>
void main()
{
int c,n,a[10];
a[0]=1;
a[9]=89;
scanf("%d",&c);
for(n=1;n<9;n++)
a[n]=a[n-1]*2;//每個盒子里放的雞蛋數
if(c<512)
{
for(n=8;n>=0;n--)
{
if(a[n]<=c)//選擇盒子
{
c=c-a[n];//還需要的雞蛋數
printf("%d\n",a[n]);
}
}
}
else
{
c=c-89;
printf("%d\n",a[9]);
for(n=8;n>=0;n--)
{
if(a[n]<=c)
{
c=c-a[n];
printf("%d\n",a[n]);
}
}
}
}

② 什麼是函數式編程思維

1.表達式化

最初的時候,需要轉變觀念,去可變數,去循環,把命令式改成表達式,注意,這只是把你丟在荒山野嶺讓你感受一下,離開熟悉的環境,地球依然在轉,但是有個
重點,那就是一切都是表達式; 為什麼是表達式呢?這個問題就像為什麼魚在水裡?
因為函數式建立在lambda演算之上而非圖靈機,只不過兩者被證明等價,所以你可以在你的機器上跑全是表達式的代碼,就如有人證明天空適合魚生存,所以
魚可以在天上游
當你接受了魚可以在天上游之後,就該上正餐了

1.5 數據與行為分離
這也是和面向對象不一致的地方,面向對象強調數據與行為綁定,但函數式不是,確切的說函數式 函數與數據等價,所以你才可以將函數當參數與返回值,你在設計時,切勿讓數據自己長腿能跑,其次,行為必須消除副作用,不可以偷偷把數據改了,習慣第一條後,應該不會的

2.高階邏輯

了函數式,就不要在想循環,賦值這些低階邏輯了,而應該更高階的思考問題,這比轉化表達式更難,函數式又叫聲明式,也就是你要做什麼,只要說一下就行,而
非寫個遍歷,做個狀態判斷,用函數式你不需要考慮這些,你不知道函數式的列表是怎麼遍歷的,中間向兩邊?
從後往前?這也是為何函數式適合並發的原因之一,你想知道列表中大於3的數有多少,只要,list.count(_ > 3)
而不是寫循環,你可以直接寫你的業務,不要拘泥於細節,有點像sql, 你需要什麼告訴電腦就行,你或許會問,count foreach filter
這些函數怎麼來的? 因為有了他們你才不需要寫循環,他們把你留在高階邏輯中,這個問題的答案請看下面

3.組合子邏輯 或又叫 自底向上的設計

數式和OO是反的,面向對象是自頂向下的設計,函數式是自底向上的設計,也就是先定義最基本的操作,然後不斷組合,不斷堆積以滿足你的所有需要,如sql
定義了select, from, where...這幾個組合子,來滿足你的查詢需求,同理函數式語言會提供foreach,
map等組合子(操作)來滿足你的需求,所以你必須自下而上的設計你的代碼結構,並且滿足你的需求,當你只用組合子寫代碼時,你會發現你寫的全是高階邏輯

果這些已有組合子滿足不了你,你就得自己寫,foreach不行,你就自己寫遞歸,我告訴你,遞歸背後也是組合子,這里一些'大神'應該不知道,在圖靈機
里,遞歸就是方法不斷調用自己沒什麼好說的,但是在lambda演算中,匿名函數是沒法調用自己的,所以遞歸是用Y組合子(又叫不動點組合子)把遞歸函數
自己求解出來再調用的,這才可以實現遞歸,並與圖靈機的循環等價,有點跑題了,總之要想順手的寫函數式,最好用面向組合子的設計,注意,不是必須,組合子
演算和lambda演算可以相互轉化,也就是,你完全可以寫一堆雜亂的表達式,但沒有組合子邏輯來得清爽,Haskell大規模使用monad這個特殊組
合子,始其變得統一整潔

好了,總結一下
函數式思維,其實就是組合子邏輯,用簡單的幾個函數組合來構建復雜邏輯,始終以高階的角度去表達問題,而非依賴副作用。
知道這點,你用java也可以寫函數式代碼了

③ 遞歸演算法是什麼

遞歸演算法(英語:recursion algorithm)在計算機科學中是指一種通過重復將問題分解為同類的子問題而解決問題的方法。

遞歸式方法可以被用於解決很多的計算機科學問題,因此它是計算機科學中十分重要的一個概念。絕大多數編程語言支持函數的自調用,在這些語言中函數可以通過調用自身來進行遞歸。

計算理論可以證明遞歸的作用可以完全取代循環,因此在很多函數編程語言(如Scheme)中習慣用遞歸來實現循環。

④ 鏄撹璦鐢ㄧ粍鍚堥敭榪愯屽瓙紼嬪簭

濡傛灉鍙戠幇閿欒錛屽埌鎴戜釜浜轟腑蹇冨彂閫佷俊鎮緇欐垜鎴栬呰ˉ鍏呴棶棰

浠ヤ笅涓烘簮鐮侊細

.紼嬪簭闆 紿楀彛紼嬪簭闆1
.紼嬪簭闆嗗彉閲 鐑閿鏍囪瘑, 鏁存暟鍨
.紼嬪簭闆嗗彉閲 綰跨▼鍙ユ焺, 鏁存暟鍨

.瀛愮▼搴 __鍚鍔ㄧ獥鍙_鍒涘緩瀹屾瘯

鐑閿鏍囪瘑 錛 娉ㄥ唽鐑閿 (_鍚鍔ㄧ獥鍙.鍙栫獥鍙e彞鏌 (), 鏍囩1.鍙栫獥鍙e彞鏌 (), 2, #C閿) ' 娉ㄥ唽鐑閿涓鐨勫弬鏁<3>鍙浠ヤ負錛0-鏃犲姛鑳介敭錛1-CTRL閿鐘舵侊紱2-SHIFT閿鐘舵侊紱4-ALT閿鐘舵佹垨鍚勯敭鐘舵佸間箣鍜屻傜幇鍦ㄦ敞鍐屸淎LT閿+C閿鈥濊繖涓鐑閿

.瀛愮▼搴 _鏍囩1_鍙嶉堜簨浠, 鏁存暟鍨
.鍙傛暟 鍙傛暟涓, 鏁存暟鍨
.鍙傛暟 鍙傛暟浜, 鏁存暟鍨

.濡傛灉鐪 (鍙傛暟涓 錛 鐑閿鏍囪瘑) ' 鍒ゆ柇鏄鍚︽寜涓嬧淎LT閿+C閿鈥
鍚鍔ㄧ嚎紼 (&瑕佸惎鍔ㄧ殑瀛愮▼搴, 榪欓噷鍐欎笂鍙傛暟, 綰跨▼鍙ユ焺) ' 鎯崇粨鏉熺殑璇濆彲浠ョ敤鍛戒護 寮哄埗緇撴潫綰跨▼ (綰跨▼鍙ユ焺) 榪欎釜鍛戒護錛涗綘涔熷彲浠ュ湪榪欑洿鎺ユ墦涓婅佸惎鍔ㄧ殑瀛愮▼搴忓悕
.濡傛灉鐪熺粨鏉

.瀛愮▼搴 瑕佸惎鍔ㄧ殑瀛愮▼搴
.鍙傛暟 鍙傛暟涓

熱點內容
java客戶端程序 發布:2024-05-04 08:08:11 瀏覽:939
騰訊視頻賬號和密碼哪裡看 發布:2024-05-04 08:08:11 瀏覽:451
專網數據存儲安全問題分析 發布:2024-05-04 07:33:28 瀏覽:131
如何獲得列印機無線密碼 發布:2024-05-04 06:44:59 瀏覽:418
上古諸神錄哪裡改密碼 發布:2024-05-04 06:43:55 瀏覽:263
灌籃高手手游自動蓋帽腳本 發布:2024-05-04 06:42:31 瀏覽:425
javajs引擎 發布:2024-05-04 06:37:33 瀏覽:798
javalist重復 發布:2024-05-04 06:19:27 瀏覽:511
max腳本管理 發布:2024-05-04 06:02:31 瀏覽:45
自行搭建伺服器 發布:2024-05-04 06:01:12 瀏覽:126