请问我这个递归出现啥问题了
题目是: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;
}
将递归里面的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的 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
... 549444387@qq.co 发表于 2018-1-23 11:15
将递归里面的while改成else; 假如你输入的n是3, 那么就会在while里面进入死循环
#include
long int di ...
哈哈,对喔,我竟然没有发现,谢谢哈!{:5_92:} winkyboy 发表于 2018-1-23 13:39
哈哈,对喔,我竟然没有发现,谢谢哈!
我也是刚学C 哈哈 一起沟通交流学的比较快 U201010009 发表于 2018-1-23 12:17
有道理,不过if里应该这样写,已经说明了f(1)=1,f(2)=1了,如下:
if ( n==1 || n==2 )
{
谢谢提醒喔
页:
[1]