導航:首頁 > 源碼編譯 > 等差數列的遞歸演算法

等差數列的遞歸演算法

發布時間:2022-12-16 18:16:26

㈠ 求經典的遞歸演算法以及案例(可用C#、PHP、JAVA其中一種語言來寫)!

我用C#來寫(注意,更多的請直接到我的個人博客,點擊, http://www.cnblogs.com/serviceboy/archive/2009/07/19/1526590.html,收看) 【例1】有甲、乙、丙、丁四人,從甲開始到丁,一個比一個大1歲,已知丁10歲,問甲幾歲?【分析】這是遞歸法的一道非常典型的題目——因為我們可以很顯然知道:假設要計算甲的年齡,那麼必須直到乙的年齡;同樣,算乙的必須直到丙的,算丙的必須知道丁的,因為丁已知,自然可以往前推算了。現在假設有一個數學模型(函數)可以計算出他們各自的年齡(方便期間我們給他們編號——甲=1,乙=2,丙=3,丁=4),那麼存在這一個F(X)函數,X表示某人的編號,其規律如下:F(1)=F(2)+1F(2)=F(3)+1F(3)=F(4)+1F(4)=10顯然,直到X=4的時候是一個終止值,其餘情況下都是返回F(X』),F(X』』)……F(X』』……』),且前者總是比後至大1,這也符合了X』和X總是呈現一定函數關系(設想一下,如果不是等差和等比,又怎麼可能在一個遞歸函數中進行計算?要知道,函數本身就是一個公式表示,既然是公式,那麼一定是一種函數關系Y=F(X)),此處顯然X和X』的關系是X=X』+1。根據規律式,我們可以寫出該遞歸函數:int AgeCal(int id)
{
if(id==4) return 10;
else
return (AgeCal(id+1)+1);
} 【例2】計算n!【分析】雖然這道題目不像例1一樣清晰明了告訴你使用「遞歸」法反推,但是我們有這樣一個常識——n!=(n-1)!*n;(n-1)!=(n-2)!*(n-1)……n=0或1,返回1.顯然n與n-1,n-2也是線性的遞減數列(等差關系)。其規律如下:F(n)=F(n-1)*nF(n-1)=F(n-2)*(n-1)F(n-2)=F(n-3)*(n-2)……F(1)=1或者F(0)=1(防止別人直接輸入0)編寫其遞歸函數,如下:int Fac(int n)
{
if(n==1 || n==0)
{
return 1;
}
else
return Fac(n-1)*n;
} 【例3】求一組整數中的最大(小)值(整數是一個int[]數組,個數未知)。【分析】當數字只有兩個的時候,我們可以使用>和<直接比較;但是當數字超過2個的時候(假設3個),那麼我們可以使用一個預訂的函數(比如Max(1,2)和3進行比較),由於1,2兩個數比較的時候已經得到一個最大值,因此在回代到Max中又變成了兩個數的比較。這樣,我們可以發現一個規律:F(1,2,3,4……n)=F(1,2,3,4……n-1)和n比較F(1,2,3,4……n-1)=F(1,2,3,4……n-2)和n-1比較……F(1,2,3)=F(1,2)和3比較F(1,2)=結果(並回代)相應的遞歸函數如下(C#):Code
int Max(int[]numbers)
{
if(numbers.Length==2)
{
return (numbers[0]>numbers[1]?numbers[0]:numbers[1]);
}
else
{
int[]tempnumbers=new int[numbers.Length-1];
for(int i=0;i<numbers.Length-1;++i)
{
tempnumbers[i]=numbers[i];
}
return (Max(tempnumbers)>numbers[numbers.Length-1]? Max(tempnumbers): numbers[numbers.Length-1]
}
}

㈡ 有關等差遞增計算力的方法

比遞增法、等差遞增法是租賃業務中計算租金的兩種方法。根據其基本公式進行推導和分析計算,可知按照等比遞增法計付租金,則實際租金率下降,甚至是大幅度下降,使出租人的利益蒙受損失;按照等差遞增法計付租金,則實際租金率總是等於名義租金率,而且計算簡便。因此,等差遞增法比等比遞增法公平合理和實用 隨著我國中學教學改革的不斷深化, 《上海市中小學數學課程標准(試行稿)》提出:大力推進基於現代信息技術的數字化數學活動(DIMA),建立以計算機、計算器(包括科學計算器、函數型計算器和圖形計算器)為支撐、擁有智能軟體和豐富課件、聯接信息網路的DIMA平台。利用該平台,改善數學內容的處理方式和呈現方式,讓學生在信息技術環境下自主學習,進行實驗、探索和研究。 在大力推進信息技術在教學過程中的普遍應用,促進信息技術與學科課程的整合的今天,我校也在實施課程改革,圖形計算器也相應運用到了數學拓展課的課堂上。為此我們設計了「用圖形計算器研究表示等差、等比數列的幾種方法」的教學案例。 一、教學背景: 在《數列》這一章中在講解等差數列與等比數列的概念時,內容比較簡單,學生很容易掌握。它是後面學習數列的基礎,有助於培養學生的觀察能力、歸納總結能力。而等比數列與等差數列在內容上是完全平行的,包括定義、性質、通項公式、兩個數的等比(差)中項等,因此在教學過程中可用類比方法,從而弄清它們之間的聯系和區別。 高一學生經過半年多的圖形計算器的使用學習,對用圖形計算器分析、建構、探究數學問題有了初步的認識。從中他們深感圖形計算器的使用不僅改變了他們學習數學的方法,而且提高了他們學習數學的興趣。他們非常喜歡這種「做數學」的學習方式。 圖形計算器有著眾多的數列使用功能,如數列通項公式、遞推公式的運用功能,數列圖像以及圖像追蹤的功能,數列運算表的表達功能,數列的迭代功能以及數列的編程功能等。這些都為學好數列的基礎知識,正確認識數列,使學生在有效的嘗試猜想、合理歸納、簡化運算、驗證運算中,體驗公式的認知過程,領會其中的數學思想方法,提高問題處理的能力等起到了很大的作用。 二.課例的設計理念 等差數列、等比數列兩個常規數列是整個數列知識學習的核心。猜想、歸納、遞歸、類比等數學思想在這兩個基礎知識學習中有著充分的體現,可謂是「麻雀雖小,五臟俱全」。而這些,在傳統數列教學中是很難全面、正確地表現出來。這會造成學生對所學知識的片面理解,對數列的後續學習帶來負面影響。而圖形計算器有著眾多的數列使用功能,如數列通項公式、遞推公式的運用功能,數列圖像以及圖像追蹤的功能,數列運算表的表達功能,數列的迭代功能以及數列的編程功能等。這些都為學好數列的基礎知識,正確認識數列,使學生在有效的嘗試猜想、合理歸納、簡化運算、驗證運算中,體驗公式的認知過程,領會其中的數學思想方法,提高問題處理的能力等起到了很大的作用。所以我們設想通過用圖形計算器來研究數列、表示數列,讓學生對這兩個常規數列有一個清晰的認識,同時也想通過這樣的學習過程,培養學生的主動探究精神,提高他們的數學學習能力。 設計與實施: 新教材的教學內容更注重函數思想與計算機技術的整合。本章內容從一開始,教材就將數列置於函數的背景下,給出定義:數列是以正整數集(或它的有限子集)為定義域的函數,當自變數按照從小到大的順序依次取值時,所對應的一列函數值為數列的項。數列是一類離散函數。在習題的配備中教材也時時與函數教學類比。等差數列、等比數列的通項公式、遞推公式、圖像是我們這節課研究的主要內容,我們設想在圖形計算器的幫助下,通過做數學的方法讓學生對數列知識有一個生動、全面、正確的認識,從學習中,提高學生的數學思維能力,培養學生正確的數學觀,真正提高學生對數學學習的興趣。 案例一 ⑴ 求等差數列 -121,-110,-99,-88,… 的第11項 ⑵ 寫出該數列的通項公式及遞推公式 對於這個問題,其實根據其基本規律,就可以計算出結果。但是用圖形計算器可以讓我們從多個角度去思考問題的解決辦法,有利於學生全面、正確了解等差數列的特性,從而簡化計算。 方法一: 運用數值的迭代功能(如圖①): ① 方法二:運用圖形計算器的數組功能(如圖②): ② 方法三

㈢ [C語言]已知等差數列0,2,4.分別用遞推和遞歸演算法求數列中第n項.

設0 為數列的第一項
遞推:
int f1(int n)
{
int i,item = -2;
for (i = 1; i

㈣ 在等差數列{an}中a18=9,求a6

套用等差數列第N項公式「Am=An+(m-n)d」進行遞歸演算法,得「a6=a18-(18-6)d=9-12d」得 a6=9-12d(d待定數值且默認為d=A2-A1)。

㈤ fortran 遞歸函數計算等差數列1+2+3+...+100的值。

過程是這樣,但是結果應該不對,因為不能表示那麼大的數

#include<stdio.h>

int fun(int n)
{
if(n == 1)
return 1;
else
return n * fun(n-1);
}

void main()
{
long sum = 0;
int i = 0;

for ( i = 1; i < 100; i++)
sum += fun(i);

printf("sum:%ld\n",sum);
}

㈥ 什麼是遞歸演算法

遞歸演算法就是一個函數通過不斷對自己的調用而求得最終結果的一種思維巧妙但是開銷很大的演算法。
比如:
漢諾塔的遞歸演算法:
void move(char x,char y){
printf("%c-->%c\n",x,y);
}

void hanoi(int n,char one,char two,char three){
/*將n個盤從one座藉助two座,移到three座*/
if(n==1) move(one,three);
else{
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
}
}

main(){
int n;
printf("input the number of diskes:");
scanf("%d",&n);
printf("The step to moving %3d diskes:\n",n);
hanoi(n,'A','B','C');
}
我說下遞歸的理解方法
首先:對於遞歸這一類函數,你不要糾結於他是干什麼的,只要知道他的一個模糊功能是什麼就行,等於把他想像成一個能實現某項功能的黑盒子,而不去管它的內部操作先,好,我們來看下漢諾塔是怎麼樣解決的
首先按我上面說的把遞歸函數想像成某個功能的黑盒子,void hanoi(int n,char one,char two,char three); 這個遞歸函數的功能是:能將n個由小到大放置的小長方形從one 位置,經過two位置 移動到three位置。那麼你的主程序要解決的問題是要將m個的"漢諾塊"由A藉助B移動到C,根據我們上面說的漢諾塔的功能,我相信傻子也知道在主函數中寫道:hanoi(m,A,B,C)就能實現將m個塊由A藉助B碼放到C,對吧?所以,mian函數裡面有hanoi(m,'A','C','B');這個調用。
接下來我們看看要實現hannoi的這個功能,hannoi函數應該幹些什麼?
在hannoi函數里有這么三行
hanoi(n-1,one,three,two);
move(one,three);
hanoi(n-1,two,one,three);
同樣以黑盒子的思想看待他,要想把n個塊由A經過B搬到C去,是不是可以分為上面三步呢?
這三部是:第一步將除了最後最長的那一塊以外的n-1塊由one位置經由three搬到two 也就是從A由C搬到B 然後把最下面最長那一塊用move函數把他從A直接搬到C 完事後 第三步再次將剛剛的n-1塊藉助hannoi函數的功能從B由A搬回到C 這樣的三步實習了n塊由A經過B到C這樣一個功能,同樣你不用糾結於hanoi函數到底如何實現這個功能的,只要知道他有這么一個神奇的功能就行
最後:遞歸都有收尾的時候對吧,收尾就是當只有一塊的時候漢諾塔怎麼個玩法呢?很簡單吧,直接把那一塊有Amove到C我們就完成了,所以hanoni這個函數最後還要加上 if(n==1)move(one,three);(當只有一塊時,直接有Amove到C位置就行)這么一個條件就能實現hanoin函數n>=1時將n個塊由A經由B搬到C的完整功能了。
遞歸這個復雜的思想就是這樣簡單解決的,呵呵 不知道你看懂沒?純手打,希望能幫你理解遞歸
總結起來就是不要管遞歸的具體實現細節步驟,只要知道他的功能是什麼,然後利用他自己的功能通過調用他自己去解決自己的功能(好繞口啊,日)最後加上一個極限情況的條件即可,比如上面說的1個的情況。

㈦ 用遞歸演算法完成100+101+102.....+300的值,寫出完整代碼

100+300=400

101+299=400

102+298=400

100*400=40000

也可以看到是個等差數列,通項公式

閱讀全文

與等差數列的遞歸演算法相關的資料

熱點內容
如何安卓系統更新 瀏覽:72
linux命令在哪裡輸入 瀏覽:495
編程語言集合類怎麼選 瀏覽:93
如何將pdf轉化為word 瀏覽:11
邁克菲隔離區解壓密碼 瀏覽:785
怎麼用偉福編譯 瀏覽:867
計算機演算法專家 瀏覽:501
什麼app清理垃圾 瀏覽:643
android流媒體伺服器 瀏覽:183
各種演算法的時間復雜度是指 瀏覽:116
幫助高考生緩解壓力 瀏覽:850
自媒體聚合APP需要什麼資質 瀏覽:487
求標准體重的演算法 瀏覽:740
伺服器後面插光纖的卡是什麼卡 瀏覽:526
低級格式化命令dos 瀏覽:85
編譯軟體的圖標 瀏覽:887
預演算法定原則包括 瀏覽:981
Python爬取商品詳情圖 瀏覽:132
c語言編譯過程列印文字 瀏覽:744
linux允許ping 瀏覽:455