wangfakun 发表于 2011-11-10 13:18

C语言算法学习 递归调用

本帖最后由 wangfakun 于 2011-11-10 13:19 编辑


(1)选班委问题:

  从n个人中选k个人当班委(不区分职务),一共有多少种选法?

  从数学的角度,我们可以直接计算出答案为CnK.

  那用C语言怎么描述呢?我们这样做:

  先投票第一个人能否当班委:如果能,就从剩余的n-1个人中再选出k-1个;如果不能,就从剩余的n-1个人中再选出k个。以此类推,直到最后一个人。

  view plain #include <stdlib.h> #include <stdio.h>

  int calculate(int n, int k)

  { if (k > n)

  return 0;else if (n == k || k == 0)

  return 1;else return calculate(n - 1, k) + calculate(n - 1, k - 1);}

  void main()

  { int n = 35;int k = 5;printf("result: %d\n", calculate(n, k));} view plain # # gcc main.c -o main # ./main result: 324632 #(2)汉诺塔问题

  汉诺塔是很经典的递归算法,问题我就不再描述了。

  view plain #include <stdio.h>

  void move(char x, char y);void hanoi(int n, char one, char two, char three);

  int main()

  { int m;printf("input the number of diskes:");scanf("%d", &m);printf("The step to move %d diskes:\n", m);hanoi(m, 'A', 'B', 'C');}

  void hanoi(int n, char one, char two, char three)

  { if (n == 1)

  move(one, three);else { hanoi(n - 1, one, three, two);move(one, three);hanoi(n - 1, two, one, three);}

  void move(char x, char y)

  { printf("%c ——> %c\n", x, y);}

小明无敌 发表于 2011-11-10 13:25

学习了

虽然不懂

一曲离别 发表于 2011-11-18 15:50

来学习学习,{:301_997:}
页: [1]
查看完整版本: C语言算法学习 递归调用