不使用exit语句的递归。,

时间:2015-07-19 14:23:30

标签: c recursion return

我编写了一个程序来查找输入数字的主要因子。

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

void pf(int, int,int);
int main()
{
    int num,i=2,j=2;
    printf("Enter a number : ");
    scanf("%d", &num);
    pf(num,i,j);
    getch();
    return 0;
}
void pf(int num,int i, int j)
{
    int rem, rem2; 
    if(num==1)
        exit(1);
    if(i>j)
    {
        rem=i%j;
        if(rem==0)
            pf(num,i+1,2);
        if(rem!=0)
            pf(num,i,j+1);
    }
    if(i==j)
    {
        rem2=num%i;
        if(rem2==0)
        {
            printf("%d, ", i);
            num=num/i;
            pf(num,i,j);
        }
        if(num!=1)
            pf(num,i+1,2);
    }
}

我正在研究递归,但我经常使用exit()语句。使用return语句时变得非常困难。任何人都可以告诉我如何通过return语句替换此程序中的exit语句。这个程序运行良好,但是在输入大量程序时,程序每次都会崩溃。

2 个答案:

答案 0 :(得分:1)

如果要返回pf,则必须将其全部调用返回 所以,我建议像这样改变

#include <stdio.h>

void pf(int n, int d);

int main(void){
    int num;
    printf("Enter a number : ");
    scanf("%d", &num);
    pf(num, 2);
    return 0;
}

void pf(int num, int i){
    if(num == 1)
        return ;
    if(num % i == 0){
        printf("%d, ", i);
        pf(num / i, i);
        return ;
    }
    if(i == 2)
        pf(num, i + 1);
    else
        pf(num, i + 2);
}

减少代码

void pf(int num, int i){
    if(num == 1)
        return ;
    if(num % i == 0){
        printf("%d, ", i);
        pf(num / i, i);
    } else {
        pf(num, i + 1 + (i != 2));
    }
}

答案 1 :(得分:-1)

我在你的代码中发现了两个问题。解决这两个问题后可能没关系:

  1. exit(1)替换为return 1;
  2. if(i==j)之后,你必须这样做:
  3. if(rem2==0) {//your code}
    else pf(num,i+1,2);