|
![]() | 作者: 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号