一些简单的递归算法
2015-08-24 16:23
288 查看
1、将一个数倒转输出:
(1)限定使用递归,第一反应想到的方法 :
(2)使用数组指针:
2、输出学生的成绩大于平均成绩的学生:
(1)C 语言版用递归:
(2)Java用的for循环:
3、组合问题:从M个不同字符中选择N个字符的不同组合:
(1)限定使用递归,第一反应想到的方法 :
#include<stdio.h> int array[10]; int i=0; void convert(int n){ if(n==0) return; else{ array[i++]=n%10; convert(n/10); } } int main(){ int number=12345; convert(number); for(int j=0;j<i;j++){ printf("%d",array[j]); } }
(2)使用数组指针:
#include<stdio.h> #include<stdlib.h> void convert(int * result,int num){ if(num>10) convert(result +1,num/10); *result=num%10; } int main(){ int number=12468; int result[10]={-1}; convert(result,number); printf("%d\n",number); for(int i=0;i<10;i++) if(result[i]>0) printf("%d",result[i]); }
2、输出学生的成绩大于平均成绩的学生:
(1)C 语言版用递归:
/* 这里有一个疑问:在加与不加return average, average的值在每次返回的时候是一样的 按理说,如果不加return average的值每次average的值应该不一样 ? 除非 average每次递归后保存一次值 */ #include<stdio.h> double find(int total,int n){ int number,score,average; scanf("%d",&number); if(number!=0){ scanf("%d",&score); average=find(total+score,n+1); if(score>=average){ printf(" number=%d: score=%d\n",number,score); } printf(" average=%d ",average); // return average; }else{ printf("Average=%d\n",total/n); return total/n; } } int main(){ find(0,0); }
(2)Java用的for循环:
package employeer_algorithm; import java.util.Scanner; class Student { private String name=""; private double store=0; public String getName() { return name; } public void setName(String name) { this.name = name; } public double getStore() { return store; } public void setStore(double store) { this.store = store; } } public class Test{ public static void main(String args[]){ double sum=0; Student students[]= new Student [5]; System.out.println("Please input informations of students:"); Scanner sc = new Scanner(System.in); for(int i=0;i<students.length;i++){ System.out.println("The informations of"+i+"th student are format as name,store "); students[i]= new Student();//刚开始的时候没有进行new 对象,以为在开辟数组的时候已经new好 students[i].setName(sc.next()); students[i].setStore(sc.nextDouble()); sum+=students[i].getStore(); } double average = sum/students.length; for(int i=0;i<students.length;i++){ if(average<students[i].getStore()) System.out.println(students[i].getName()+"'s score above average store"); } } }
3、组合问题:从M个不同字符中选择N个字符的不同组合:
#include<stdio.h> #include<stdlib.h> #include<cmath> void find(char *source, char *result, int n){ if(n==1){ while(*source){ printf("%s %c\n",result,*source++); } }else{ int i,j; for(i=0;source[i]!=0;i++); for(j=0;result[j]!=0;j++); for(;i>=n;i--){ result[j]=*source++; result[j+1]='\0'; find(source,result,n-1); } } } int main(){ int const n = 3; char * source="ABCDEF"; char result[n+1]={0}; if(n>0) find(source,result,3); }
相关文章推荐
- Gradle – Spring 4 MVC Hello World Example – Annotation
- Echarts-java使用
- 10个有关String的面试问题
- Android的NDK开发(1)————Android JNI简介与调用流程
- RSA加密算法学习
- 利用runtime检测这个对象是否存在某属性?
- 设计模式——单例模式
- Hadoop之HDFS文件操作
- UVa-11988 Broken Keyboard (a.k.a. Beiju Text)
- ExtJs博客前奏
- 简道云-更新日志
- activity渲染结束的判断--onWindowFocusChanged
- ODPS简介
- 【Linux命令详解】1、日期和时间―(date、cal、hwclock和clock)
- 第一章 Python and NLTK
- HDU3118Arbiter (二分图的本质(好题)+二进制枚举)
- 板子启动ubuntu无法进入命令行
- hdu 1732 Push Box(bfs)
- Lua和C++交互
- const的使用