1、基础算法思想
---恢复内容开始---
1、递推法
递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西。
(1)顺推法
是指从已知条件出发,逐步推算出要解决问题的方法。例如:斐波拉契数列就可以通过顺推法不断递推算出新的数据。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
(2)逆推法
是从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
(3)枚举(穷举)算法
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:
(1)可预先确定候选答案的数量;
(2)候选答案的范围在求解之前必须有一个确定的集合。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
(4)递归算法
就是一种直接或者间接地调用自身的算法。递归算法的具体实现过程一般通过函数或子过程来完成,在函数或子过程的内部,编写代码直接或者间接地调用自己,即可完成递归操作。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
---恢复内容结束---
1、递推法
递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西。
(1)顺推法
是指从已知条件出发,逐步推算出要解决问题的方法。例如:斐波拉契数列就可以通过顺推法不断递推算出新的数据。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
(2)逆推法
是从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
(3)枚举(穷举)算法
枚举法的本质就是从所有候选答案中去搜索正确的解,使用该算法需要满足两个条件:
(1)可预先确定候选答案的数量;
(2)候选答案的范围在求解之前必须有一个确定的集合。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
(4)递归算法
就是一种直接或者间接地调用自身的算法。递归算法的具体实现过程一般通过函数或子过程来完成,在函数或子过程的内部,编写代码直接或者间接地调用自己,即可完成递归操作
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /****************************************************************************************************** 2 * 3 * 递归算法: 4 * 求阶次 5 * 6 * 7 *******************************************************************************************************/ 8 9 #include"stdio.h" 10 11 12 long fact(int n) 13 { 14 if(n<=1) 15 return 1; 16 else 17 return fact(n-1)*n; 18 } 19 20 21 void main() 22 { 23 int n; 24 puts("请输入整数:"); 25 scanf("%d",&n); 26 printf("\n%d!=%d\n",n,fact(n)); 27 28 system("pause"); 29 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /****************************************************************************************************** 2 * 3 * 递归算法: 4 * 进制转换 5 * 6 * 7 *******************************************************************************************************/ 8 9 #include"stdio.h" 10 #include"string.h" 11 #include"conio.h" 12 13 void NumChange(char *s, int num, int n) 14 { 15 char c[]={"0123456789abcdef"}; 16 int len; 17 18 if(num==0) 19 { 20 strcpy(s,""); 21 return; 22 } 23 24 NumChange(s,num/n,n); 25 len=strlen(s); 26 s[len]=c[num%n]; 27 s[len+1]='\0'; 28 } 29 30 31 32 void main() 33 { 34 int n,num; 35 char s[100]; 36 puts("输入需要转换的十进制数:"); 37 scanf("%d",&num); 38 puts("输入需要转换的进制:"); 39 scanf("%d",&n); 40 NumChange(s, num, n); 41 printf("转换的数为:%s",s); 42 43 getch(); 44 }