楼主: 499803468

一个难忘的递归题,寻找高手

[复制链接]
论坛徽章:
0
21#
发表于 2008-7-31 15:08 | 只看该作者
那你为啥你向你同事 要呢?拿出来大家学习一下 呵呵。

使用道具 举报

回复
论坛徽章:
0
22#
 楼主| 发表于 2008-7-31 16:28 | 只看该作者
原帖由 feiyangdefei 于 2008-7-31 15:08 发表
那你为啥你向你同事 要呢?拿出来大家学习一下 呵呵。


不好意思,我没有留底,我们公司编写出该程序的人现在在中兴通讯海外工作,他也没有留底。只是我们还有一定的编程印象。

使用道具 举报

回复
论坛徽章:
0
23#
发表于 2008-8-2 18:15 | 只看该作者
不是高手,写了个实验下
#include <iostream>
using namespace std;

inline void output(int a[], int n)
{
        for (int i = 0; i < n; i++)
        {
                cout << a << " ";
        }
        cout << endl;
}

void pemutation(int a[], int index, int n)
{
        int i = 0;
        if (index == n-1)
        {
                output(a, n);
                return;
        }
        for (i = index; i < n; i++)
        {
                swap(a[index], a);
                pemutation(a, index+1, n);
                swap(a, a[index]);
        }
}

int main()
{
        int i(0), n(5);
        int a[5];

        for (i = 0; i < n; i++)
        {
                a = i + 1;
        }

        pemutation(a, 0, 5);
        return 0;
}

使用道具 举报

回复
论坛徽章:
0
24#
 楼主| 发表于 2008-8-5 13:05 | 只看该作者
虽然还不满足要求,但是已经很简洁了。对于普通编递归程序的人来说,这时非常好的结果了。


void pemutation(int a[], int index, int n)
{
        int i = 0;
        if (index == n-1)
        {
                output(a, n);
                return;
        }
        for (i = index; i < n; i++)
        {
                swap(a[index], a);
                pemutation(a, index+1, n);
                swap(a, a[index]);
        }
}

使用道具 举报

回复
论坛徽章:
0
25#
 楼主| 发表于 2008-8-5 13:09 | 只看该作者
原帖由 499803468 于 2008-8-5 13:05 发表
虽然还不满足要求,但是已经很简洁了。对于普通编递归程序的人来说,这时非常好的结果了。


void pemutation(int a[], int index, int n)
{
        int i = 0;
        if (index == n-1)
        {
                output(a, n);
                return;
        }
        for (i = index; i < n; i++)
        {
                swap(a, a);
                pemutation(a, index+1, n);
                swap(a, a);        }
}


改为:
void pemutation(int a[], int index, int n)
{
        int i = 0;
        if (index == n-1)  { OUTPUTAN }
        for (i = index; i < n; i++)
        {      swap(a, a);
                pemutation(a, index+1, n);
                swap(a, a);        }
} [/quote]

使用道具 举报

回复
论坛徽章:
0
26#
发表于 2008-8-10 22:07 | 只看该作者
好棒~

使用道具 举报

回复
论坛徽章:
0
27#
发表于 2009-2-26 17:43 | 只看该作者

我用java写的,完全得到正确结果

import java.util.*;

public class RecursionTest {
        public static String[] fullArrange(int num) {
                if (num == 1) return new String[]{"1"};
                String[] arrange = fullArrange(num - 1);
                ArrayList<String> full = new ArrayList<String>();
                for (String str : arrange) {
                        for (int i = 0; i <= str.length(); i++) {
                                StringBuilder sb = new StringBuilder(str);
                                sb.insert(i, num);
                                full.add(sb.toString());
                        }
                }
                return full.toArray(new String[]{});
        }
       
        public static void main(String[] args) {
                if (args.length < 1) {
                        System.out.println("useful: argument is not found");
                        return;
                }
                int num = 0;
                try {
                        num = Integer.valueOf(args[0]);
                } catch(Exception ex) {
                        System.out.println("argument must be a integer");
                }
                String[] full = fullArrange(num);
                for (int i = 0; i < full.length; i++) {
                        if (i != 0 && i % 10 == 0) System.out.println("");
                        System.out.print(full + " ");
                }
        }
}

使用道具 举报

回复
论坛徽章:
4
28#
发表于 2009-3-2 22:18 | 只看该作者
很想看看楼主写的程序,既然教学生,而且认为是普通题目。对楼主来说应该不难,而且楼主可以在递归中不使用循环,所以想学习一下

使用道具 举报

回复
论坛徽章:
175
指数菠菜纪念章
日期:2012-03-31 14:04:28指数菠菜纪念章
日期:2013-01-04 11:30:40咸鸭蛋
日期:2013-01-22 13:19:252013年新春福章
日期:2013-02-25 14:51:24迷宫蛋
日期:2013-03-11 12:50:34法拉利
日期:2013-10-25 16:25:232014年新春福章
日期:2014-02-18 16:43:09马上有钱
日期:2014-02-18 16:43:09懒羊羊
日期:2015-03-04 14:52:11灰彻蛋
日期:2012-11-26 14:52:06
29#
发表于 2009-3-4 13:25 | 只看该作者
恩,递归不用循环,是个小挑战!

使用道具 举报

回复
论坛徽章:
3
八级虎吧徽章
日期:2009-02-16 17:58:31CTO参与奖
日期:2009-02-20 09:44:20
30#
发表于 2009-3-17 23:54 | 只看该作者
原帖由 freedom2k 于 2009-3-2 22:18 发表
很想看看楼主写的程序,既然教学生,而且认为是普通题目。对楼主来说应该不难,而且楼主可以在递归中不使用循环,所以想学习一下

根本就不敢想不用循环来递归,看来还是自己不扎实

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表