winkyboy 发表于 2018-1-23 10:28:49

请问我这个递归出现啥问题了

题目是:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2))且输入的 A,B,n限制是(1 <= A, B <= 1000, 1 <= n <= 100,000,000),当A=B=n=0时退出程序.
为什么编译没有问题,但是输出不了结果的,请各位帮忙看一下。

#include <stdio.h>

int digui(int ,int ,int );

int digui(int A,int B,int n)
{
    int result;
    if(n==1||n==2) result=A*1+B*1;
    while(n>2)
    {
      result=A*digui(A,B,n-1)+B*digui(A,B,n-2);   //递归求值
    }
    return result;
}
int main()
{
    int A,B,n,result;
    while(scanf("%d %d %d",&A,&B,&n)!=EOF&&1<=A&&B<=1000&&1<=n<=100000000||A!=0||B!=0||n!=0)
    {
      result=digui(A,B,n);
      printf("%d\n",result);
    }
    return 0;
}

549444387@qq.co 发表于 2018-1-23 11:15:31

将递归里面的while改成else; 假如你输入的n是3, 那么就会在while里面进入死循环
#include <stdio.h>
long int digui(int ,int ,int );

long int digui(int A, int B, int n)
{
        long int result;
        if ( n==1 || n==2 )
        {
                result = A*1 + B*1;
        }
        else
        {
                result = A*digui(A, B, n-1) + B*digui(A, B, n-2);   //递归求值
        }
        return result;
}
int main(void)
{
        int A, B, n;
        long int result;
        while( scanf("%d %d %d", &A, &B, &n) != EOF)
        {
                if( 1 <= A && B <= 1000 && 1<=n<=100000000 )
                {
                result = digui ( A, B, n );
                printf("%ld\n", result);
                }
        }
        return 0;
}
有不足的地方多多沟通, 也是刚学C的

U201010009 发表于 2018-1-23 12:17:33

549444387@qq.co 发表于 2018-1-23 11:15
将递归里面的while改成else; 假如你输入的n是3, 那么就会在while里面进入死循环
#include
long int di ...

有道理,不过if里应该这样写,已经说明了f(1)=1,f(2)=1了,如下:
if ( n==1 || n==2 )
{
       result = 1;
}
else
      ...

winkyboy 发表于 2018-1-23 13:39:45

549444387@qq.co 发表于 2018-1-23 11:15
将递归里面的while改成else; 假如你输入的n是3, 那么就会在while里面进入死循环
#include
long int di ...

哈哈,对喔,我竟然没有发现,谢谢哈!{:5_92:}

549444387@qq.co 发表于 2018-1-23 14:47:27

winkyboy 发表于 2018-1-23 13:39
哈哈,对喔,我竟然没有发现,谢谢哈!

我也是刚学C 哈哈 一起沟通交流学的比较快

winkyboy 发表于 2018-1-23 15:19:51

U201010009 发表于 2018-1-23 12:17
有道理,不过if里应该这样写,已经说明了f(1)=1,f(2)=1了,如下:
if ( n==1 || n==2 )
{


谢谢提醒喔
页: [1]
查看完整版本: 请问我这个递归出现啥问题了