找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2014|回復(fù): 10
打印 上一主題 下一主題
收起左側(cè)

這個(gè)C語(yǔ)言函數(shù)返回值怎么跟想不一樣?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
#include "REG52.H"fun(int n);
int m;
void main()
{
m=fun(4);
}
fun(int n)
{ int t;
if((n==0)||(n==1))t=3;
else t=n*fun(n-1);
return t; }
這個(gè)變量m=3


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:704014 發(fā)表于 2020-3-8 10:17 | 只看該作者
為什么m=3呢?調(diào)試t變量看不見(jiàn)
回復(fù)

使用道具 舉報(bào)

板凳
ID:704014 發(fā)表于 2020-3-8 13:35 | 只看該作者
哦,自己發(fā)現(xiàn)問(wèn)題了,是函數(shù)再入問(wèn)題
回復(fù)

使用道具 舉報(bào)

地板
ID:275826 發(fā)表于 2020-3-8 14:16 | 只看該作者
函數(shù)遞歸調(diào)用,m=72;
回復(fù)

使用道具 舉報(bào)

5#
ID:704014 發(fā)表于 2020-3-8 16:33 | 只看該作者
tyrl800 發(fā)表于 2020-3-8 14:16
函數(shù)遞歸調(diào)用,m=72;

上面代碼怎樣改過(guò)來(lái)呢,編譯一直出錯(cuò)。。
回復(fù)

使用道具 舉報(bào)

6#
ID:704014 發(fā)表于 2020-3-8 19:23 | 只看該作者
chenzhizhong 發(fā)表于 2020-3-8 16:33
上面代碼怎樣改過(guò)來(lái)呢,編譯一直出錯(cuò)。。

上面的代碼出現(xiàn)死循環(huán),把子函數(shù)放主函數(shù)后面就會(huì)死循環(huán),放主函數(shù)前面就不會(huì),為什么呢?
回復(fù)

使用道具 舉報(bào)

7#
ID:704232 發(fā)表于 2020-3-9 00:39 | 只看該作者
  1. #include <stdio.h>

  2. int fun(int n)
  3. {
  4.     int t;
  5.     if(n==0||n==1) t=3;
  6.     else t=n*fun(n-1);
  7.     return t;
  8. }

  9. void main()
  10. {
  11.     int m;
  12.     m=fun(4);  //fun(4)=4*fun(3)=4*3*fun(2)=4*3*2*fun(1)=4*3*2*3=72,因此返回值t為72
  13.     printf("%d\n",m); //m=72
  14. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

8#
ID:704232 發(fā)表于 2020-3-9 00:43 | 只看該作者
chenzhizhong 發(fā)表于 2020-3-8 19:23
上面的代碼出現(xiàn)死循環(huán),把子函數(shù)放主函數(shù)后面就會(huì)死循環(huán),放主函數(shù)前面就不會(huì),為什么呢?

C程序是從上往下編譯的,子函數(shù)放后面的話就不知道fun()函數(shù),你可以把子函數(shù)放主函數(shù)前面,或者在主函數(shù)里面聲明一下int fun(int n);
回復(fù)

使用道具 舉報(bào)

9#
ID:532564 發(fā)表于 2020-3-9 05:57 | 只看該作者
我比較好奇你編譯的時(shí)候有沒(méi)有warning,畢竟從來(lái)沒(méi)有嘗試過(guò)定義函數(shù)不給返回值類(lèi)型,一開(kāi)始我以為如果沒(méi)有返回值類(lèi)型就默認(rèn)為void,但是后面說(shuō)有結(jié)果輸出,看來(lái)是可以這么寫(xiě)的啊
回復(fù)

使用道具 舉報(bào)

10#
ID:496117 發(fā)表于 2020-3-9 11:27 | 只看該作者
stephanie_han 發(fā)表于 2020-3-9 05:57
我比較好奇你編譯的時(shí)候有沒(méi)有warning,畢竟從來(lái)沒(méi)有嘗試過(guò)定義函數(shù)不給返回值類(lèi)型,一開(kāi)始我以為如果沒(méi)有返 ...

c語(yǔ)言默認(rèn)init,以前的程序都不嚴(yán)謹(jǐn)
回復(fù)

使用道具 舉報(bào)

11#
ID:496117 發(fā)表于 2020-3-9 11:27 | 只看該作者
你需要學(xué)習(xí)一下c語(yǔ)言基礎(chǔ),遞歸都沒(méi)了解啊
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表