吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3749|回复: 2
收起左侧

[其他转载] C语言算法学习 递归调用

 关闭 [复制链接]
wangfakun 发表于 2011-11-10 13:18
本帖最后由 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 [root@ShiGuang test]# [root@ShiGuang test]# gcc main.c -o main [root@ShiGuang test]# ./main result: 324632 [root@ShiGuang test]#(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
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-9-21 13:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表