2012-02-13 79 views
0

使用while循环在C中使用递归的阶乘程序。大家好,谢谢你的宝贵回复。在while循环中使用递归函数的阶乘程序

  1. 你们都说过使用(如果条件而不是while)。其正确的我接受你的建议。那么为什么我不使用递归函数来寻找阶乘。

  2. 有人说while(n>1)是一个无限循环。但是在这个程序中n的值在fact(n-1)函数本身中递减。现在在这个程序中,我在while循环之后输入printf()getch()以知道n的值。仅当while条件变为false时,printf()getch()函数才会执行。

当我运行此程序的printf()功能和getch()功能重复执行和printf()函数的返回值n = 1。所以我确定的n值递减。那么为什么这个程序一次又一次地执行while循环呢?

  1. 在所有函数中,return语句是最后一个函数的终止语句。当执行到达返回语句时,执行从函数中终止并返回到被调用函数的下一行。但是在这个程序中,在执行到达返回语句之后,它将重复执行相同的函数。这是为什么?

注:我使用的Turbo C 3.0运行此程序,

#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

首先我会建议你把一个提示,这样scanf函数之前的?当没有文字要求你这样做时,控制台提示你输入一个数字是很奇怪的。看起来程序已挂起。

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)。