论坛: 编程破解 标题: 一个函数中两次递归调用函数的问题?? 复制本贴地址    
作者: lovejiang [lovejiang]    论坛用户   登录
#include<stdio.h>
#include<conio.h>
int fun(int n)
(int s=0;
if(n=1)s=1;
else
s=n+fun(n-1)+fun(n-2);
return s;
}
void main()
{int n=100;
int i;
clirscr();
i=fun(n);
printf("%d",i);
}
如果n的值等于10,那又怎么样呢

地主 发表时间: 04-01-15 17:33

回复: cyh811122 [cyh811122]   论坛用户   登录
本人认为先执行完一个再执行另外一个递归,你可先用小一点的数测试一下呗不用上来就直接问呀!

B1层 发表时间: 04-01-15 23:56

回复: 286 [unique]   版主   登录
你的程序中的问题主要有以下几点:
1 if(n=1)s=1; 该语句你想表示什么? 应该是if(n==1)s=1;吧?但如果这样又出现另一个问题,当n=2时,出现了调用f(0),而你的f(0)没有定义,因此就是改成if(n==1)s=1;也会出错。
2 对于递归程序,最重要的是要考虑数值由于急剧增大而会溢出。所以n=100,而结果保存只用个int i;很显然是不合适的。极有可能会造成溢出。
3 这些是小问题,可能是你的笔误。比如{写成(。clrscr()写成clirscr()。编译出错后你修改应该不成问题。
4 递归变化最大的可能就是时间了,有些程序形式参数为10的时候可以你感觉不到的时候内得到结果,而当值等于11的时候却要等上半天。所以值可以从小慢慢试。该程序n值要在40以内。
5 程序可修改如下
#include <stdio.h>
#include <conio.h>

double fun(int n)
{
    double s=0;
    if(n<2)
        s=1;
    else
        s=n+fun(n-1)+fun(n-2);
    return s;
}
void main()
{
    int n=40;//结果出现约为10秒。我慢所以时间长,你们可能会快些。
    double i;
    i=fun(n);
    printf("%lg",i);
}












B2层 发表时间: 04-01-16 09:40

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号