您的位置:首页 > 其它

一些简单的递归算法

2015-08-24 16:23 288 查看
1、将一个数倒转输出:

  (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);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: