2012-02-13 3 views
0

while 루프를 사용하여 C에서 재귀를 사용하는 계승 프로그램. 안녕하세요, 귀중한 답변에 감사드립니다.while 루프가있는 C에서 재귀 함수를 사용하는 계승 프로그램

  1. 당신은 모두 사용한다고 말합니다. 그것의 올바른 나는 당신의 제안을 받아들입니다. 그렇다면 왜 재귀 함수를 사용하여 계승을 찾는 동안 나는 사용하지 않는가?

  2. 누군가가 while(n>1)이 무한 루프라고 말했습니다. 그러나이 프로그램에서 n 값은 fact(n-1) 함수 자체에서 감소합니다. 이제이 프로그램에서 while 루프 다음에 printf()getch()을 넣어 n 값을 알아 냈습니다. printf()getch() 함수는 while 조건이 false가 될 때만 실행됩니다.

이 프로그램에게 printf() 함수를 실행 getch() 함수가 반복 실행하고 printf()n 함수 반환 값 = 1. 그래서 n의 값이 감소되는 것을 결정하는 경우. 그렇다면 왜이 프로그램은 while 루프를 반복해서 실행합니까?

  1. 모든 함수에서 return 문은 마지막 함수 종료 문입니다. 실행이 return 문에 도달하면 실행은 함수에서 끝나고 호출 된 함수의 다음 행으로 돌아갑니다. 그러나이 프로그램에서 실행이 return 문에 도달하면 실행을 위해 동일한 함수가 반복됩니다. 왜 그런가요?

참고 :이 프로그램을 실행 터보 C 3.0을 사용하고,

난 당신이 scanf와 전에 같은 프롬프트를 넣어 제안 할 수 있습니다 모든
#include<stdio.h>  
int fact(int n) 
{  
    int x=1;  

    while(n>1)  
    {  
     x=n*fact(n-1);  
    } 
    printf("N value after the while loop:%d",n); 
    getch(); 
    return(x);  
}  

void main()  
{  
    int n,fact1;  
    scanf("%d",&n);  
    fact1=fact(n);  
    printf("%d",fact1);  
} 

답변

1

먼저? 텍스트를 요구할 때 콘솔에 숫자를 입력하라는 메시지가 표시되는 것은 이상한 일입니다. 프로그램이 멈춘 것처럼 보입니다.

printf("Give the value of n:"); 

그래서 프로그램을 수정하려면 아래 예와 같이 해보는 것이 좋습니다. 재귀가 어떻게 작동하는지 이해해야합니다. while() 내에서 숫자를 계산할 수는 없습니다. 뭔가를 반환해야합니다. 그렇지 않으면 무한 루프입니다.

#include<stdio.h> 
int fact(int n) 
{ 
    int x=1; 

    while(n>1) 
    { 
     x = n*fact(n-1); 
     return x; 
    } 
    return x; 
} 

void main() 
{ 
    int n,fact1; 
    printf("Please provide the value of \'n\':"); 
    scanf("%d",&n); 
    fact1=fact(n); 
    printf("Result is %d",fact1); 

    return 0; 
} 
2

무한 루프가 있습니다. 줄 fact(n-1)n의 값을 줄이지 않습니다. 이 함수는 더 작은 n을 가진 다른 호출을 호출합니다.

fact(2)으로 전화하면 n==2으로 전화 할 수 있습니다. 이 함수에는 무한 루프가있어서 fact(1)을 호출합니다. 이 두 번째 호출에서는 n==1이므로 루프 조건은 false이며이 호출은 회선을 인쇄하여 첫 번째 호출의 무한 루프 (해당 n이 여전히 2 임)로 리턴합니다.

관련 문제