⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch3.cpp

📁 实现了几个递归的函数
💻 CPP
字号:
#include<iostream>
using namespace std;


void change(int num,int n)
{
	if(num!=0)
	{
		int k=num%n;
		change(num/n,n);
		cout<< k<<" ";
	}
}

int Fib(int num)
{

	if(num==1 || num==2) return 1;
	else 		
		return Fib(num-1)+Fib(num-2);


}


int Triangle(int i,int j)
{

    if(j==1)   return 1;
        else if(i==1) return 0;
    else return Triangle(i-1,j-1)+Triangle(i-1,j);
}



int gun(int n, int m) //计算n发打中m环有多少种可能 
{  
 int fn=0,i;  
  
 //一发只能打中0~10环,n发则能打中0~10*n环。 
 if(m<0||m>10*n) return 0;  

//一发打中m(0<=m<=10)环只有一种可能。  
if(n==1) return 1;  

//以上两句为函数出口,下面的循环为函数的递归体。 
  
//如果第一发打中1环,则后(n-1)发应打中(m-1)环 
//如果第一发打中2环,则后(n-1)发应打中(m-2)环 
//... 
//如果第一发打中10环,则后(n-1)发应打中(m-10)环 
//综上,n发打中m环的可能性为: 
// fn=f(n-1,m-1)+f(n-1,m-2)+...+f(n-1,m-10) 

 for(i=0;i<=10;i++)  
 fn+=gun(n-1,m-i);  
 return fn;  
}  
 
 

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

}


void main()
{
	int which;
    while(1)
	{
		cout<<"进制转换 --------1"<<endl;
		cout<<"Fibonacci--------2"<<endl;
		cout<<"杨辉三角形-------3"<<endl;
		cout<<"打枪问题---------4"<<endl;
		cout<<"1~n的全排列------5"<<endl;
		cout<<"GRAY  -----------6"<<endl;
		cout<<"退出 ------------0"<<endl;

		cout<<"请选吧"<<endl;
		cin>>which;

		switch(which)
		{
		case 1:
			{   int num1,n;
				cout<<"输入要转换的数:";
				cin>>num1;
				cout<<"要转成几进制?";
				cin>>n;
				change(num1,n);
				cout<<endl;
				break;
			}
		case 2:
			{   int num2;
				cout<<"想知道Fibonacci数列到第几个数?";
				cin>>num2;
				for(int i=1;i<=num2;i++)
				cout<<Fib(i)<<" ";
				cout<<endl;
				break;
			}
		case 3:
			{   int num3;
			    int i,j;
				cout<<"请输入阶数:";
				cin>>num3;
				for(i=1;i<=num3;i++)
				{
					for(j=1;j<=i;j++)
						cout<<Triangle(i,j);
					cout<<endl;
				}
			

			break;
			}
		case 4:
			{
				cout<<"一个射击运动员打靶,靶一共有10环,连开10枪打中90环的可能性有多少种?"<<endl;
			    cout<<"共有"<<gun(10,90)<<"种可能性."<<endl;
			break;
			}
		case 5:
			{   int num4;
				cout<<"此程序能做1~n 的全排列    输入 n :";
				cin>>num4;
				cout<<"共有"<<Array(num4)<<"种可能性"<<endl;
	        break;
			}
		
		case 6:
		//	gray();break;
		case 0:
			exit(0);break;
		}




	}



}










double derive(int n,double i)
{
if(n==1&&i==1)
return 0;
else if(n==1&&i==2)
return 1;
else if(i>pow(2,n-1))
return derive(n-1,pow(2,n)-i+1)+pow(2,n-1);
else
return derive(n-1,i);
}
void convert(int n,double i)
{
int left;
for(int time=1;time{
left=i-((int)(i/2))*2;
i=(int)(i/2);
cout<}
cout<}
int main(int argc, char* argv[])
{
int n;
cout<<"输入一个整数(格雷码的位数):";
cin>>n;
double i;
for(i=1;i{
convert(n,derive(n,i));
}
getchar();
return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -