编写递归程序时,考虑内存使用很重要

问题描述 投票:0回答:1

如何优化内存以使程序运行得更快?

我刚刚开始学习递归问题,还不理解它们。 例如这个问题 例如,假设集合R={r1,r2,...,rn}由n个要排列的元素组成,其中r1,r2,...,rn可以相同。尝试设计一个算法来列出 R 的所有不同排列。也就是说,给定 n 和 n 个可能重复的要排列的元素,计算并输出 n 个元素的所有不同排列。

c
1个回答
0
投票
#include<stdio.h>
 
int num=0;
 
//交换函数
void swap(char &a,char &b)
{
    char temp;
    temp=a;
    a=b;
    b=temp;
}
 
//判断函数,判断两个字符是否相等,相同返回1,不用交换,反之返回0,交换
int ok(char list[],int i,int j)
{
    if(j>i)
    {
        for(int t=i;t<j;t++)
        {
            if(list[t]==list[j])
            {
                return 1;
            }
        }
    }
    return 0;
}
 
//递归函数 
void perm(char list[],int n,int m)
{
    if(n==m)
    {
        num++;
        for(int i=1;i<=m;i++)
        {
            printf("%c",list[i]);
        }
        printf("\n");
    }
    else
    {
        for(int i=n;i<=m;i++)
        {
            if(!ok(list,n,i))
            {
                swap(list[n],list[i]);
                perm(list,n+1,m);
                swap(list[n],list[i]);
            }
            
            //两次交换又给换回去了 
        }
    }
}
 
 
 
 
//主函数 
int main()
{
    int n;
    scanf("%d",&n);
    
    char s[100];
    for(int i=0;i<=n;i++)
    {
        scanf("%c",&s[i]);//存到数组1—n里面 
    }
    perm(s,1,n);
    printf("%d\n",num);`enter code here`
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.