您的位置:首页 > 其它

递归的一些简单的例子,供大家参考

2013-07-19 18:50 253 查看



#include<stdio.h>

//求连续自然数之和

/*

int Sum(int x, int y)

{

if(x == y)

{

return x ;

}

return x + Sum(x + 1, y);

}

int main()

{

int b = 0;

b = Sum(1, 10);

printf("%d \n",b);

return 0;

}*/

////////////////////////////////////////////////////////

/*

//求x0 ~ xn (x0 < xn)的阶乘

int factor(int x0, int xn)

{

if(x0 >= xn)

{

return x0;

}

return x0 * factor(x0 + 1, xn);

}

int main()

{

int b = 0;

b = factor(1, 6);

printf("%d \n",b);

return 0;

}*/

///////////////////////////////////////////////////////

// 字符 的全排列

/*

void swap(char* a, char* b, char c)

{

c = *a;

*a = *b;

*b = c;

}

void Permutation(char *list, int i, int n)

{

int j, temp;

if(i == n)

{

for(j = 0; j<= n; j++)

{

printf("%c", list[j]);

}

printf("\n");

}

else

{

for(j = i; j <= n; j++)

{

swap(&list[i], &list[j],temp) ;

Permutation(list, i+1, n) ;

swap(&list[i], &list[j], temp);

}

}

}

int main()

{

char list[7] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};

Permutation(list, 0, 2);

return 0;

}*/

////////////////////////////////////////////////////////////////////

//猴子吃桃

/**************************************

小猴子第一天摘下若干桃子,

当即吃掉一半,又多吃一个.

第二天早上又将剩下的桃子吃一半,又多吃一个.

以后每天早上吃前一天剩下的一半另一个.

到第10天早上猴子想再吃时发现,只剩下一个桃子了.

问第一天猴子共摘多少个桃子?

****************************************/

/*

int fruit(int begin, int times)

{

if(times == 10)

{

return begin;

}

printf("b = %d\n",begin);

return fruit((begin + 1) * 2, times +1);

}

int main()

{

int b = 0;

b = fruit(1, 2);

printf("b = %d\n",b);

return 0;

} */

////////////////////////////////////////////////////////////

//求两个数的最大公约数与最小公倍数

/*

int fgongyue(int m, int n)

{

if(n == 0)

{

return m;

}

return fgongyue(n, m % n);

}

int main()

{

int a = 27, b = 24;

int result = fgongyue(a, b);

int result1 = a * b / result;

printf("最大公约数: %d\n",result);

printf("最小公倍数: %d\n",result1);

return 0;

}*/

////////////////////////////////////////////////////

//角谷定理

/************************************

角谷定理。输入一个自然数,若为偶数,则把它除以2,

若为奇数,则把它乘以3加1。经过如此有限次运算后,

总可以得到自然数值1。求经过多少次可得到自然数1。

如:输入22,

输出 22 11 34 17 52 26 13 40

20 10 5 16 8 4 2 1

step = 16;

*************************************/

/*

int i = 0;

int jiaogu(int n)

{

if(n == 1)

{

printf("%d",n);

i++;

return i;

}

else if(n %2 == 0)

{

i++;

printf("%d ",n);

return jiaogu(n/2);

}

else

{

i++;

printf("%d ",n);

return jiaogu(n * 3 + 1);

}

}

int main()

{

int number;

int count = 0;

printf("请输入一个数: \n");

scanf("%d",&number);

count = jiaogu(number);

printf("需要 %d 次运算\n",i);

return 0;

}*/

///////////////////////////////////////////////////////////////

//十进制转二进制

/*

int change(int num)

{

if(num == 1)

{

printf("%d", num);

return 0;

}

change(num / 2);
//12, 6, 3, 1

printf("%d",num % 2);
// 0, 0, 1, 1

return 1;

}

int main()

{

int number;

printf("输入一个十进制数: \n");

scanf("%d", &number);

printf("二进制输出: \n");

change(number);

printf("\n");

return 0;

}*/

///////////////////////////////////////////////////////

//计算题

/********************************************

计算M=max(a,b,c)/[max(a+b,b,c)*max(a,b,b+c)],

其中a,b,c由键盘输入

********************************************/

//总感觉不对劲 求高手!!!!!!!!!

/*

double Max(double x, double y, double z)

{

return (x > y? x : y) > z? (x > y? x : y) : z;

// return Max(x, y, z) /
(Max(x + y, y, z) * Max(x , y, y + z));

}

double result(double xx, double yy, double zz)

{

double m1 = Max(xx, yy, zz);

double m2 = Max(xx + yy, yy, zz);

double m3 = Max(xx, yy, yy + zz);

return m1 / (m2 *m3);

}

int main()

{

double a, b, c;

printf("请输入三个数:\n");

scanf("%lf %lf %lf", &a, &b, &c);

printf("%f\n",result(a, b, c));

return 0;

}*/

////////////////////////////////////////////////////////////////

//走楼梯

/*************************************

梯有N阶,上楼可以一步上一阶,也可以一次上二阶。

编一个程序,计算共有多少种不同的走法。

return 1+(fc(n-1)+fc(n-2)

**************************************/

/*

int ladder(int n)

{

if(n == 1)

{

//printf("%d ",n);

return n;

}

else if(n == 2)

{

// printf("%d ",n);

return 2;

}

return ladder(n - 1) + ladder(n - 2); // n=4 ladder(3) +ladder(2) = ? + 2

// ladder(3) =ladder(2)+ladder(1)
= 3

}

int main()

{

int num = ladder(5);

printf("%d\n",num);

return 0;

}*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: