[問題] 有關遞迴

看板C_and_CPP作者 (孫諧痣)時間12年前 (2012/04/07 22:17), 編輯推噓4(405)
留言9則, 4人參與, 最新討論串1/1
#include<stdio.h> #include <iostream.h> int print(int x) { printf("(1)%d\t ", x); x && print(x-1); x && printf("(2)%d\t ", x); } int main() { print(3); system("pause"); return 0; } 執行結果為: (1)3 (1)2 (1)1 (1)0 (2)1 (2)2 (2)3 問題: 想請問這個遞迴函式 為什麼在x=0之前印的出編號(1)的message 為什麼x=0之後只能印出編號(2)的message 且還會遞增到3 ====================================== 最近這幾天想破頭還是不太懂這函式為什麼會這樣跑 煩請版友賜教 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.169.105.8

04/07 22:38, , 1F
x && print(x-1) 就等於 if (x != 0) 才執行 print(x-1);
04/07 22:38, 1F

04/07 22:42, , 2F
可是為什麼 x在(2)不為零時 但是沒有先印出(1)呢?
04/07 22:42, 2F

04/07 22:48, , 3F
因為 (2) 使用的是 printf 不是 print 這名字取得可真爛
04/07 22:48, 3F

04/07 22:50, , 4F
if(x!=0) {print(x-1); printf("(2)%d\t ",x);}
04/07 22:50, 4F

04/07 22:50, , 5F
把那兩行理解成這樣就行了
04/07 22:50, 5F

04/07 22:56, , 6F
想請問x=0之後為什麼還跳的進if(x!=0)裡面印出(2)
04/07 22:56, 6F

04/07 23:11, , 7F
http://goo.gl/skZMJ 自己用 F11 一步一步看
04/07 23:11, 7F

04/07 23:13, , 8F
因為那不x=0跳進去的。是x=1跳進去的
04/07 23:13, 8F

04/07 23:14, , 9F
原來回傳值可以這樣用~想說為什麼不寫return~
04/07 23:14, 9F
文章代碼(AID): #1FW4o09A (C_and_CPP)