生活随笔
收集整理的這篇文章主要介紹了
鸭子的故事
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一.實驗目的及內容
(一)目的
1.掌握遞歸程序設計的方法。明確遞歸的概念,通過對問題的分析,找出遞歸關系以及遞歸出口以對問題進行遞歸結構設計;
2.掌握遞歸程序轉換為非遞歸程序的方法。
(二)內容
用遞歸方法設計下列各題,并給出每道題目的遞歸出口(遞歸結束的條件)和遞歸表達式。同時考慮題目可否設計為非遞歸方法,如果可以,設計出非遞歸的算法。
1.一個人趕著鴨子去每個村莊賣,每經過一個村子賣去所趕鴨子的一半又一只。這樣他經過了七個村子后還剩兩只鴨子,問他出發時共趕多少只鴨子?經過每個村子賣出多少只鴨子?
2.角谷定理。輸入一個自然數,若為偶數,則把它除以2,若為奇數,則把它乘以3加1。經過如此有限次運算后,總可以得到自然數值1。求經過多少次可得到自然數1。
如:輸入22,
輸出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1
STEP=16
二.結果
三.源代碼
#include<iostream>
using namespace std;//非遞歸程序
int fun(int v,int sum);
//遞歸程序
int Recurtion(int j,int summary);
//角色定理
int FR(int input,int village);//非遞歸
int play(int input,int STEP);//遞歸int main()
{//第一部分:非遞歸調用int i; //經過的村莊數int sum=2;//利用循環計算鴨子的總數,倒著計算鴨子的數目cout<<"非遞歸方法"<<endl;for(i=7;i>0;i--){sum=fun(i,sum);}sum=(sum+1)*2;cout<<"鴨子的總數為:"<<sum<<endl<<endl;//第二部分:遞歸調用cout<<"遞歸調用"<<endl;int summary=2;int j=7;Recurtion(j,summary);//第三部分:角色定理int village=1;//village為村莊,初始化為1int input;//input為輸入的鴨子數cout<<"請輸入鴨子的個數:";cin>>input;cout<<endl<<endl;cout<<"非遞歸"<<endl;FR(input,village);//非遞歸cout<<endl<<endl;cout<<"遞歸"<<endl;cout<<input<<" ";play(input,village);//遞歸return 0;
}//非遞歸調用
int fun(int v,int sum)
{if(v==7){cout<<"經過第"<<v<<"個村莊時剩余鴨子的總數:"<<sum<<endl;return sum;}else{sum=(sum+1)*2;//前一次鴨子的總數cout<<"經過第"<<v<<"個村莊時剩余鴨子的總數:"<<sum<<endl;return sum;}
}//遞歸調用
int Recurtion(int j,int summary){summary=(summary+1)*2;cout<<"經過第"<<j<<"個村莊時的鴨子數為:"<<summary<<endl;j=j-1;if(j>0)Recurtion(j,summary);return 0;
}//角色定理(非遞歸)
int FR(int input,int village)
{cout<<input<<" ";for(village;input!=1;village++){//輸入的鴨子數為偶數數if(input%2==0){input=input/2;cout<<input<<" ";}//輸入的鴨子數為奇數時else{input=input*3+1;cout<<input<<" ";}}cout<<endl;cout<<"STEP="<<village<<endl;return 0;
}//遞歸
int play(int input,int STEP)
{//當輸入鴨子數位為1時,退出遞歸 if(input==1){cout<<endl;cout<<"STEP="<<STEP<<endl; //輸出次數return 1;}//輸入鴨子的個數位偶數時else if(input%2==0){ input=input/2;cout<<input<<" ";STEP=STEP+1;play(input,STEP);}//輸入鴨子的個數位奇數時else{input=input*3+1;cout<<input<<" ";STEP=STEP+1;play(input,STEP);}return 0;
}
總結
以上是生活随笔為你收集整理的鸭子的故事的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。