1樓:new妞寧
是反序的
比方說現在s指向字串123
呼叫reverse(123)
然後判斷不為空 呼叫 reverse(23)
23不為空
呼叫3此時3也不為空,呼叫reverse(3的下一位字元,此時為空了)
判斷為空,則else return啦 ,此時返回到reverse(3)的函式體裡呼叫reverse(空)的語句處,後執行cout<<*s,則輸出3
此時reverse(3)執行完畢,返回到reverse(23)函式體中,執行cout<<*s;此時s為指向23字串的首地址,則*s為字串的第一個字元,輸出2
reverse(23)呼叫結束,返回到reverse(123)處,執行cout<<*s;;此時s為指向123字串的首地址,則*s為字串的第一個字元,輸出1
整個過程結束
看懂了沒有
關鍵在 cout<<*s 每次輸出的是字串的第一個字元,而在輸出此字元前他後面的字元已經輸出了
2樓:風若遠去何人留
*s為0時 即字串結尾
比如字串為test那麼儲存的時候就是t e s t \0 這個\0就是ascii 0
執行的時候會是
判斷t 執行reverse e
判斷e 執行reverse s
判斷s 執行reverse t
判斷t 執行reverse 0
判斷0 直接返回
輸出t輸出s
輸出e輸出t
這樣就反序了
3樓:萬楊
遞迴函式的呼叫,當第一個*s不為零時,就再次呼叫reverse(s+1),不是執行下面的cout,而是繼續呼叫reverse()函式,直到return終止後,開始輸出。相當於一個棧的形式,棧是後進先出的原則,就是最後一次呼叫reverse()函式時,s是指向字串最後一個字元。
4樓:匿名使用者
不是,你可以舉個例子比如char s = "abc"
當做引數傳入,把函式呼叫的地方,用**替換,看下過程就明白了
c語言:採用遞迴方法實現將輸入的字串按反序輸出
5樓:不傻不笨不弱智
#include
void f()
void main()
6樓:手機使用者
先寫第一個
#include "stdio.h"
main()
sum=sum+n;
printf("sum is:%d",sum);
getch();}
c++ 遞迴函式實現使輸入的字串按逆序輸出。請問該函式是如何實現遞迴的,求詳細解釋
7樓:素筆描靑花
函式用的是系統棧,棧的特點是先進後出
假設 str = "abcde";
遞迴函式當未達到末尾的'\0'時,就呼叫下一個字元的列印函式(這些就逐一儲存在棧中,最先遍歷到的在最底下,先遍歷的總是在後遍歷的下邊)
到了str[i] == '\0' 的時候,不符合遞迴條件,就出棧,其實棧內儲存的是print()函式和每個字元的地址,你可以想象一下,出棧的時候,從上到下,應該是"e d c b a"是吧,這樣依次列印,順序就自然而然逆序了
運用遞迴反序輸出字元陣列裡面的函式 求大神解釋
8樓:匿名使用者
void func(char *s,int n)
c語言:編寫函式,採用遞迴方法實現將輸入的字串按反序輸出。
9樓:匿名使用者
void f()
----------------
以回車結束
10樓:
#include
void fun(char *s)
}void main()
11樓:匿名使用者
void p(char *a,int i)
什麼是遞迴函式?怎樣實現遞迴,遞迴函式F n 的遞迴演算法是什麼
假面 遞迴就是一個函式在它的函式體內呼叫它自身。執行遞迴函式將反覆呼叫其自身,每呼叫一次就進入新的一層。遞迴函式必須有結束條件。當函式在一直遞推,直到遇到牆後返回,這個牆就是結束條件。所以遞迴要有兩個要素,結束條件與遞推關係。遞迴有兩個基本要素 1 邊界條件 確定遞迴到何時終止,也稱為遞迴出口。2 ...
求pascal遞迴演算法教程,free pascal用遞迴的方法編寫函式求fibonacci級數
我也不會。我學c和c 的。抱歉 free pascal用遞迴的方法編寫函式求fibonacci級數 function fibonacci n integer int64 begin if n 0 or n 1 then fibonacci 1else fibonacci fibonacci n 1 ...
kmeans演算法用Python怎麼實現
混小子愛 參考 kmeans演算法用python怎麼實現 k means聚類演算法python實現,匯入的資料集有什麼要求 一,k means聚類演算法原理 k means 演算法接受引數 k 然後將事先輸入的n個資料物件劃分為 k個聚類以便使得所獲得的聚類滿足 同一聚類中的物件相似度較高 而不同聚...